我使用Struts 1.2,我需要引用在JSP页面中的一些国际化字符串的值。 通常我会做这个用的<bean:message>标记,但我需要从Java代码(包围<%...%>),而不是引用它。
我怎样才能做到这一点?
例如:
<%
person.setName("John Smith");
person.setOccupation("Chef"); // I want to internationalize this string
%>
我使用Struts 1.2,我需要引用在JSP页面中的一些国际化字符串的值。 通常我会做这个用的<bean:message>标记,但我需要从Java代码(包围<%...%>),而不是引用它。
我怎样才能做到这一点?
例如:
<%
person.setName("John Smith");
person.setOccupation("Chef"); // I want to internationalize this string
%>
首先,我会建议看你的动作/ 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代码的业务逻辑只要有可能。
我认为这是做这件事。
里面的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"));
%>
我的方法是:
把一些该进口在你的jsp:
<%@ page import="org.apache.struts.validator.Resources" %>
然后调用“的getMessage()”静从“资源”类方法如下:
<sometag name="p1" value="<%=Resources.getMessage(request, \"my.property.from.resources\")%>"/>
注意:不要忘记'='而插入文本=> '值=“<%= ...%>'
下面是在Java代码片断的基础上,戈捷的建议使用有点更清洁的方式。
导入(这里没有变化):
<%@ page import="org.apache.struts.validator.Resources" %>
代码片段:
<%
person.setName("John Smith");
person.setOccupation(Resources.getMessage(request, "occupation.property.from.resources"));
%>
希望这会使事情变得更清洁。