bean:java代码中的等效消息?

时间:2012-09-04 13:30:47

标签: java jsp struts

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

我该怎么做?

例如:

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

4 个答案:

答案 0 :(得分:1)

首先,我建议您查看Action / JSP / Taglibs,看看是否绝对需要在JSP中使用scriptlet代码。使用Struts的全部原因是保持一个干净的MVC模型,并避免业务逻辑泄漏到您的视图(即JSP)中。

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

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

直接进入您的Action类或可重用的服务方法。

但是,如果您确定必须将scriptlet代码放入JSP中。

< bean:message>使用org.apache.struts.taglib.bean.MessageTag的标记类。

我查看了这个类的源代码,然后依次使用Struts TagUtils.retrieveMessageResources,它返回Struts MessageResources:org.apache.struts.util.MessageResources

您可以在比支持Struts Taglib更一般的上下文中模仿/调整此代码。

但是,我强烈建议尽可能避免脚本代码中的业务逻辑。

答案 1 :(得分:1)

我认为这是一种方法。

如果您有以下内容,请访问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"));
%>

答案 2 :(得分:1)

我的方式是:

在jsp中添加一些导入:

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

然后从'Resources'类中调用'getMessage()'静态方法,如下所示:

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

注意:插入text =&gt;时不要忘记'=' '值=“LT;%的 = ...%GT;'

答案 3 :(得分:1)

根据Gauthier的建议,以下是一种在Java代码片段中使用的更简洁的方法。

导入(此处不做更改):

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

代码段:

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

希望它会让事情更清洁。