我正在使用 Struts 1.2,我需要在 JSP 页面中引用一些国际化字符串的值。通常我会使用 < bean:message > 标记来执行此操作,但我需要从 Java 代码(由 <% ... %> 包围)中引用它。
我怎样才能做到这一点?
例如:
<%
person.setName("John Smith");
person.setOccupation("Chef"); // I want to internationalize this string
%>
我认为这是一种方法。
在 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"));
%>
首先,我建议您查看您的 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 Taglibs 相比,您可以在更一般的上下文中查看模仿/改编此代码。
不过,我再次强烈主张尽可能避免在 scriptlet 代码中使用业务逻辑。
我的方法是:
在你的 jsp 中放一些这个导入:
<%@ page import="org.apache.struts.validator.Resources" %>
然后从“Resources”类调用“getMessage()”静态方法,如下所示:
<sometag name="p1" value="<%=Resources.getMessage(request, \"my.property.from.resources\")%>"/>
注意:插入文本时不要忘记'=' => 'value="<% = ...%>'
根据 Gauthier 的建议,这是一种在 Java 代码片段中使用的更简洁的方法。
导入(这里没有变化):
<%@ page import="org.apache.struts.validator.Resources" %>
代码片段:
<%
person.setName("John Smith");
person.setOccupation(Resources.getMessage(request, "occupation.property.from.resources"));
%>
希望它能让事情变得更干净。