-->

豆:消息等同于Java代码?(bean:message equivalent in java cod

2019-09-22 03:28发布

我使用Struts 1.2,我需要引用在JSP页面中的一些国际化字符串的值。 通常我会做这个用的<bean:message>标记,但我需要从Java代码(包围<%...%>),而不是引用它。

我怎样才能做到这一点?

例如:

<% 
person.setName("John Smith");
person.setOccupation("Chef");   // I want to internationalize this string
%>

Answer 1:

首先,我会建议看你的动作/ JSP /标签库,看看你绝对需要在你的JSP使用scriptlet代码。 整个之所以使用Struts是要保持一个干净的MVC模式,避免业务逻辑漏入您的观点(即JSP页面)。

我会建议考虑重构你的scriptlet代码:

<%  
    person.setName("John Smith"); 
    person.setOccupation("Chef");    
%> 

到直接进入你的Action类或可重复使用的服务的方法。

但是,如果你确定,你绝对必须删除scriptlet代码到你的JSP。

< bean:message>使用的tagclass org.apache.struts.taglib.bean.MessageTag

我看着源出于此类,它反过来使用Struts的TagUtils.retrieveMessageResources ,它返回的Struts的MessageResources: org.apache.struts.util.MessageResources

你可以看一下模拟/除支持Struts的标签库更一般的情况下适应这个代码。

此外,虽然,我强烈主张寻找到避免scriptlet代码的业务逻辑只要有可能。



Answer 2:

我认为这是做这件事。

里面的struts-config.xml,如果您有以下几点:

<message-resources parameter="ABC"/>

然后你做到以下几点:

在JSP的顶部:

<%@ page import="java.util.Locale" %>
<%@ page import="org.apache.struts.Globals" %>
<%@ page import="org.apache.struts.util.MessageResources" %>

在某处的JSP:

<%    
MessageResources mr = MessageResources.getMessageResources("ABC");
Locale locale = (Locale) session.getAttribute(Globals.LOCALE_KEY);

person.setName("John Smith");
person.setOccupation(mr.getMessage(locale, "Chef"));
%>


Answer 3:

我的方法是:

把一些该进口在你的jsp:

<%@ page import="org.apache.struts.validator.Resources" %>

然后调用“的getMessage()”静从“资源”类方法如下:

<sometag name="p1" value="<%=Resources.getMessage(request, \"my.property.from.resources\")%>"/>

注意:不要忘记'='而插入文本=> '值=“<%= ...%>'



Answer 4:

下面是在Java代码片断的基础上,戈捷的建议使用有点更清洁的方式。

导入(这里没有变化):

<%@ page import="org.apache.struts.validator.Resources" %>

代码片段:

<% 
person.setName("John Smith");
person.setOccupation(Resources.getMessage(request, "occupation.property.from.resources"));
%>

希望这会使事情变得更清洁。



文章来源: bean:message equivalent in java code?
标签: java jsp struts