我正在使用Struts 1.2,我需要在JSP页面中引用一些国际化字符串的值。通常我会使用< bean:message>标记,但我需要从Java代码中引用它(由<%...%>包围)。
我该怎么做?
例如:
<%
person.setName("John Smith");
person.setOccupation("Chef"); // I want to internationalize this string
%>
答案 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"));
%>
希望它会让事情更清洁。