0
<h:panelGroup rendered="#{Account.Status eq 'FAILED' }">
            <h:outputText value="# {msg['account/failed']}" escape="false" />
</h:panelGroup>

<h:panelGroup rendered="#{Account.Status eq 'SUCCESS' }">
            <h:outputText value="# {msg['account/success']}" escape="false" />
</h:panelGroup>

...more panelgroup messages like this for all different Status types,
 and different messages to be shown..

在我的 glassfish Jee6 应用程序中,我根据帐户的状态显示我的消息,我将我的字符串保存在一个文本文件中,并从上面的 JSF 页面访问 {msg['account/failed']}

现在这些 if-else 状态条件对于不同类型的消息越来越多,并且使 JSF 页面变得一团糟,我怎样才能从 Java 代码中做同样的事情呢?

我可以设置消息的值并将 if else 条件放在我的 Java 代码中,但是我将如何访问保存字符串的文本文件?或任何其他干净的JSF方式来做到这一点?

4

3 回答 3

2

假设帐户状态是一个枚举,我会发布该方法

public static String toString(Enum<?> e) {
    ResourceBundle bundle = FacesContext.getCurrentInstance().getApplication().getResourceBundle("messages");
    return bundle.getString(e.getClass().getSimpleName() + "/" + e.name());
}

作为EL-function,并像使用它一样使用它

#{e:toString(Account.status)}

(代码未经测试,因为我手头没有日食,但总体思路应该是合理的)

于 2013-06-06T15:30:18.000 回答
2

只需将枚举值作为捆绑键的一部分。例如

<c:set var="key" value="account.status.#{account.status}" />
<h:outputText value="#{msg[key]}" escape="false" />

(我只替换并小写/.实例/属性名称符合标准约定)

account.status.FAILED = Failed
account.status.SUCCESS = Success

或者,使键成为枚举的属性。另见:

于 2013-06-07T12:30:10.373 回答
-1

您可能想要使用 JSTL 标记...我曾与 JSF 合作过,有时您必须尝试一些事情。您可以使用 ,

   <c:if test="condition">
   <h:outputText value="# {msg['account/success']}" escape="false" />
  </c:if>

或使用

    <c:choose>
          <c:when test="${param.enter=='1'}">
  <h:outputText value="# {msg['account/success']}" escape="false" />
          </c:when>

          <c:otherwise>
         <h:outputText value="# {msg['account/failed']}" escape="false" />
          </c:otherwise>
    </c:choose>
于 2013-06-06T15:19:48.787 回答