jsf以清晰的方式显示条件文本

kqqjbcuj  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(298)
<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方法来做到这一点?

zsohkypk

zsohkypk1#

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

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

(我只更换了 /. 并将示例/属性名称小写(符合标准约定)
具有

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

或者,使键成为枚举的属性。另请参见:
如何在f:selectitem中使用枚举值
正在资源束中本地化枚举值。

8iwquhpp

8iwquhpp2#

你可能想使用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>
qzwqbdag

qzwqbdag3#

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

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

作为el函数,并像


# {e:toString(Account.status)}

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

相关问题