9

3 つの値があり、最初の 2 つの値の場合は 1 つのコンポーネントをレンダリングし、3 番目の値の場合は別のコンポーネントをレンダリングする必要があります

以下に、私のページがあります:

page.xhtml

<ui:repeat value=#{bean.value} var="data">
<c:choose>
 <c:when  test="#{data.thirdValue == 'content'}">
   <h:outputText value="Wrong value"/>
 </c:when>
 <c:otherwise>
  Correct!
 </c:otherwise>
</c:choose>
</ui:repeat>

これが私のページの定義方法です。次の名前空間も追加しました: xmlns:c="http://java.sun.com/jsp/jstl/core.

<c:when>test for 内で定義された値が「true」または「false」を返すかどうかをテストしましたが、そうです。

私の問題は、<c:when>が評価されないことです。<c:otherwise>値は常にレンダリングされます。何か不足していますか?when が評価されないのは、条件付きレンダリングが内部に<ui:repeat>あるためですか?

どんな助けでも大歓迎です。前もって感謝します

4

2 に答える 2

12

@Jens がコメントで述べたように、それらは異なるフェーズで処理されるため、c:choose を削除する必要があります。JSTL は JSF と連携して使用できますが、解決される順序を尊重する必要があります。BalusC によるすばらしい回答を読んでください。

必要に応じて、render 属性を使用して、条件付きでテキストを出力できます。

<ui:repeat value="#{bean.value}" var="data">
    <h:outputText rendered="#{data.thirdValue == 'content'}" value="Wrong value"/>
    <h:outputText rendered="#{data.thirdValue != 'content'}" value="Correct!"/>
</ui:repeat>
于 2013-05-27T12:48:55.817 に答える