bean:java代码中的消息等价物?
我正在使用Struts 1.2,需要在JSP页面中引用一些国际化字符串的值。通常,我会使用bean:java代码中的消息等价物?,java,jsp,struts,Java,Jsp,Struts,我正在使用Struts 1.2,需要在JSP页面中引用一些国际化字符串的值。通常,我会使用标记来实现这一点,但我需要从Java代码中引用它(用包围) 我该怎么做 例如: <% person.setName("John Smith"); person.setOccupation("Chef"); // I want to internationalize this string %> 首先,我建议查看您的操作/JSP/Taglibs,看看您是否绝对需要在JSP中使用script
<%
person.setName("John Smith");
person.setOccupation("Chef"); // I want to internationalize this string
%>
首先,我建议查看您的操作/JSP/Taglibs,看看您是否绝对需要在JSP中使用scriptlet代码。使用Struts的全部原因是保持一个干净的MVC模型,并避免业务逻辑泄漏到视图(即JSP)中 我建议您考虑重构您的scriptlet代码:
<%
person.setName("John Smith");
person.setOccupation("Chef");
%>
直接导入到动作类或可重用服务方法中
但是,如果您确定必须将scriptlet代码放到JSP中
使用org.apache.struts.taglib.bean.MessageTag的tagclass
我查看了这个类的源代码,它反过来使用StrutsTagUtils.retrieveMessageResources
,它返回Struts MessageResources:org.apache.Struts.util.MessageResources
与支持Struts标记库相比,您可以在更一般的上下文中模拟/调整此代码
不过,我再次强烈主张尽可能避免在scriptlet代码中使用业务逻辑 我认为这是一种方法 在struts-config.xml中,如果您有以下内容:
<message-resources parameter="ABC"/>
然后执行以下操作:
<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" %>
然后从“Resources”类调用“getMessage()”静态方法,如下所示:
<sometag name="p1" value="<%=Resources.getMessage(request, \"my.property.from.resources\")%>"/>
注意:在插入文本=>'value=“””时不要忘记“=”根据Gauthier的建议,这里有一种更简洁的方法用于Java代码片段 导入(此处无更改):
代码段:
<%
person.setName("John Smith");
person.setOccupation(Resources.getMessage(request, "occupation.property.from.resources"));
%>
希望它能让事情变得更干净。谢谢你的回复。这是我继承的代码,重构不是我的权限。不客气。我理解,继承代码总是很有挑战性。看起来你已经找到了解决方案。祝你好运。我想最初的问题是关于代码片段,所以我根据你的代码添加了另一个答案。谢谢你的灵感!