2011-11-14 105 views
30

次のJSFコードには、2つの別々の<c:if></c:if>が含まれています。それを見てみましょう。JSFを使用したELのif-elseif-elseの表現

<?xml version='1.0' encoding='UTF-8' ?> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:c="http://java.sun.com/jsp/jstl/core"> 
    <h:head> 
     <title>JSF EL</title> 
    </h:head> 
    <h:body> 
     <h:form> 

      <c:set scope="request" var="row" property="x" value="10"/> 

      <c:if test="#{row==10}"> 
       <h:outputLabel value="value = 10"/> 
      </c:if> 

      <c:if test="#{row==15}"> 
       <h:outputLabel value="value = 15"/> 
      </c:if> 

     </h:form> 
    </h:body> 
</html> 

これは単に、実行時にJSFページに値= 10を表示します。上記の<c:if></c:if>を以下のif-elseif-else(Javaコンテキスト)で表現する必要があります。それはJSFを使用した式言語(EL)で表すことができ、どのよう

if(row.equals(10)) 
{ 
    //Do something...(JSF stuff) 
} 
else if(row.equals(15)) 
{ 
    //Do something...(JSF stuff) 
} 
else 
{ 
    //Do something...(JSF stuff) 
} 

+0

'rendered'属性がで適用されることに留意すべきである(http://stackoverflow.com/questions/4870462/conditionally-displaying-html-elements) – BalusC

答えて

41

次のコードの最も簡単な方法:EL式の構文について

<h:outputLabel value="value = 10" rendered="#{row == 10}" /> 
<h:outputLabel value="value = 15" rendered="#{row == 15}" /> 
<h:outputLabel value="value xyz" rendered="#{row != 15 and row != 10}" /> 

リンク。 http://developers.sun.com/docs/jscreator/help/jsp-jsfel/jsf_expression_language_intro.html#syntax

+0

[条件付きHTML要素を表示する]が重複する可能性内部のすべてが完全に評価されることを意味する 'render'フェーズです。大きなコンポーネントがレンダリングされない場合(このように)、多くのコードが実行され、結果が破棄される可能性があります。 – KarlP

45

あなたがIFとして仕事をしたい場合は、ELを使用することができます。

<h:outputLabel value="#{row==10? '10' : '15'}"/> 

は、スタイルやクラスを変更する:

style="#{test eq testMB.test? 'font-weight:bold' : 'font-weight:normal'}" 

class="#{test eq testMB.test? 'divRred' : 'divGreen'}" 
+1

これ以外にもifを使用するのと同じ方法がありますか? – sree

8

を表現言語で条件演算子を使用してあなたが "IF ELSE" を使用することができます

<p:outputLabel value="#{transaction.status.equals('PNDNG')?'Pending': 
            transaction.status.equals('RJCTD')?'Rejected': 
            transaction.status.equals('CNFRMD')?'Confirmed': 
            transaction.status.equals('PSTD')?'Posted':''}"/> 
2

可能な解決策の1つは、

<h:panelGroup rendered="#{bean.row == 10}"> 
    <div class="text-success"> 
     <h:outputText value="#{bean.row}"/> 
    </div> 
</h:panelGroup> 
関連する問題