【问题标题】:bean:message equivalent in java code?bean:java代码中的消息等价物?
【发布时间】:2012-08-29 04:15:40
【问题描述】:

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

我该怎么做?

例如:

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

【问题讨论】:

    标签: java jsp struts


    【解决方案1】:

    我认为这是一种方法。

    在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"));
    %>
    

    【讨论】:

      【解决方案2】:

      首先,我建议查看您的 Action/JSP/Taglibs,看看您是否绝对需要在您的 JSP 中使用 scriptlet 代码。使用 Struts 的全部原因是保持一个干净的 MVC 模型,并避免业务逻辑泄漏到您的视图(即 JSP)中。

      我建议考虑重构您的 scriptlet 代码:

      <%  
          person.setName("John Smith"); 
          person.setOccupation("Chef");    
      %> 
      

      直接进入你的 Action 类或可重用的服务方法。

      但是,如果您确定绝对必须将 scriptlet 代码放入您的 JSP。

      &lt; bean:message&gt; 使用org.apache.struts.taglib.bean.MessageTag 的标记类。

      我查看了这个类的源代码,它又使用了 Struts TagUtils.retrieveMessageResources,它返回 Struts MessageResources:org.apache.struts.util.MessageResources

      与支持 Struts Taglibs 相比,您可以在更一般的上下文中考虑模仿/调整此代码。

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

      【讨论】:

      • 感谢您的回复。这是我继承的代码,但我没有权限进行重构。
      • 不客气。我明白,当您继承代码时,它总是具有挑战性。看起来你已经找到了解决方案。祝你好运。
      【解决方案3】:

      我的方法是:

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

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

      然后从'Resources'类调用'getMessage()'静态方法如下:

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

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

      【讨论】:

      • 我认为最初的问题是关于代码 sn-ps,所以我只是根据您的代码添加了另一个答案。感谢您的启发!
      【解决方案4】:

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

      导入(这里没有变化):

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

      代码sn-p:

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-26
        • 1970-01-01
        • 2015-03-16
        • 2012-06-03
        • 1970-01-01
        • 2019-08-14
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        相关资源
        最近更新 更多