bean:java代码中的消息等价物?

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

我正在使用Struts 1.2,需要在JSP页面中引用一些国际化字符串的值。通常,我会使用标记来实现这一点,但我需要从Java代码中引用它(用包围)

我该怎么做

例如:

<% 
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

我查看了这个类的源代码,它反过来使用Struts
TagUtils.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"));
%>


希望它能让事情变得更干净。

谢谢你的回复。这是我继承的代码,重构不是我的权限。不客气。我理解,继承代码总是很有挑战性。看起来你已经找到了解决方案。祝你好运。我想最初的问题是关于代码片段,所以我根据你的代码添加了另一个答案。谢谢你的灵感!