2011-11-14 12 views
30

Poniższy kod JSF zawiera dwa oddzielne <c:if></c:if>. Spójrzmy na to.Reprezentacja if-elseif-else w EL przy użyciu JSF

<?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> 

To po prostu wyświetla wartość = 10 na stronie JSF w czasie wykonywania. Muszę reprezentować powyższe <c:if></c:if> z następujących if-elseif-else (kontekście Java).

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

Jak to może być reprezentowany z Expression Language (EL) z wykorzystaniem JSF?

+0

możliwe duplikat [Warunkowo wyświetlania elementów HTML] (http://stackoverflow.com/questions/4870462/conditionally-displaying-html-elements) – BalusC

Odpowiedz

41

Poniższy kod najprostszy sposób:

<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}" /> 

link do składni wyrażeń EL. http://developers.sun.com/docs/jscreator/help/jsp-jsfel/jsf_expression_language_intro.html#syntax

+0

Należy zauważyć, że 'rendered' atrybut stosuje się tak faza 'render', co oznacza, że ​​wszystko wewnątrz będzie w pełni ocenione. Jeśli duży komponent nie jest renderowany (w ten sposób), może to oznaczać, że można wykonać wiele kodu, a wyniki zostaną odrzucone. – KarlP

45

Można użyć EL jeśli chcesz pracować jako IF:

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

Zmiana stylów lub klas:

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

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

Czy istnieje podobny sposób korzystania z an if without else? – sree

8

Można użyć "else if" za pomocą operatora warunkowego w języku ekspresyjnego poniżej:

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

Jednym z możliwych rozwiązań jest:

<h:panelGroup rendered="#{bean.row == 10}"> 
    <div class="text-success"> 
     <h:outputText value="#{bean.row}"/> 
    </div> 
</h:panelGroup> 
Powiązane problemy