2

我正在使用 Struts 1.2,我需要在 JSP 页面中引用一些国际化字符串的值。通常我会使用 < bean:message > 标记来执行此操作,但我需要从 Java 代码(由 <% ... %> 包围)中引用它。

我怎样才能做到这一点?

例如:

<% 
person.setName("John Smith");
person.setOccupation("Chef");   // I want to internationalize this string
%>
4

4 回答 4

2

我认为这是一种方法。

在 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"));
%>
于 2012-09-04T15:20:23.317 回答
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 Taglibs 相比,您可以在更一般的上下文中查看模仿/改编此代码。

不过,我再次强烈主张尽可能避免在 scriptlet 代码中使用业务逻辑。

于 2012-09-04T15:03:01.513 回答
1

我的方法是:

在你的 jsp 中放一些这个导入:

<%@ page import="org.apache.struts.validator.Resources" %>

然后从“Resources”类调用“getMessage()”静态方法,如下所示:

<sometag name="p1" value="<%=Resources.getMessage(request, \"my.property.from.resources\")%>"/>

注意:插入文本时不要忘记'=' => 'value="<% = ...%>'

于 2012-11-21T17:56:47.143 回答
1

根据 Gauthier 的建议,这是一种在 Java 代码片段中使用的更简洁的方法。

导入(这里没有变化):

<%@ page import="org.apache.struts.validator.Resources" %>

代码片段:

<% 
person.setName("John Smith");
person.setOccupation(Resources.getMessage(request, "occupation.property.from.resources"));
%>

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

于 2014-02-18T15:47:29.800 回答