0

私の問題ではh:panelGroup、条件に基づいて表示する必要があります。このh:panelGroupの場合、 rendered属性はすでに設定されています。

 <h:panelGroup rendered="#{not empty program.categories}">
    <li>
        <strong>Category: </strong> 
        <h:outputLabel value="#{not empty program.categories ? 'A':'N/A'}"/>
    </li>
 </h:panelGroup>

今、私は以下のコードのような条件を維持しようとしています:

<c:if test="${program.distTypeName != 'X' || program.distTypeName != 'Y' || program.distTypeName != 'Z'}">

<h:panelGroup rendered="#{not empty program.categories}">
    <li>
        <strong>Category: </strong> 
        <h:outputLabel value="#{not empty program.categories ? 'A':'N/A'}" />
    </li>
</h:panelGroup>

しかし、これは機能していません。私が間違っていることを教えてください。基本的に、disTypeが x、y、z にない場合は、 を表示する必要がありますh:panelGroup

not injstl タグで条件をテストするにはどうすればよいですか? 前もって感謝します。

4

1 に答える 1

0

JSTL タグと JSF タグは同期していません。JSTL タグはビルド時に実行され、JSF タグはレンダリング時に実行されます。そのため、奇妙な動作が見られます。の代わりにJSFrendered属性を使用する必要があります。c:if

さらに、char 比較も Java とは異なる動作をします。Char は EL 式の String のように動作します。これは、演算子が比較!=に適切な結果を与えないことを意味します。String

<c:if test="${program.distTypeName != 'X' || program.distTypeName != 'Y' || program.distTypeName != 'Z'}">

上記のc:ifステートメントは、次のようにレンダリングされた属性に変換できます

<h:panelGroup rendered="#{program.distTypeName.compareTo('X') != 0 || program.distTypeName.compareTo('Y') != 0 || program.distTypeName.compareTo('Z') != 0}">

distTypeNameまたはが の場合、文字の ASCII 表現もここで使用できますchar

<h:panelGroup rendered="#{program.distTypeName ne 88 || program.distTypeName ne 89 || program.distTypeName ne 90}">

関連記事

https://stackoverflow.com/a/4154930/892994

于 2013-07-11T07:55:46.937 に答える