2011-11-14 70 views
30

El siguiente código JSF contiene dos <c:if></c:if> separados. Veámoslo.La representación de if-elseif-else en EL usando 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> 

Simplemente muestra valor = 10 en la página JSF en tiempo de ejecución. Necesito representar el anterior <c:if></c:if> con el siguiente if-elseif-else (contexto Java).

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

¿Cómo puede ser representado con Expression Language (EL) usando JSF?

+0

posible duplicado de [mostrando condicionalmente elementos HTML] (http://stackoverflow.com/questions/4870462/conditionally-displaying-html-elements) – BalusC

Respuesta

41

El siguiente código de la manera más fácil:

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

Enlace para la sintaxis de las expresiones EL. http://developers.sun.com/docs/jscreator/help/jsp-jsfel/jsf_expression_language_intro.html#syntax

+0

Debe tenerse en cuenta que el atributo 'rendered' se aplica en el fase 'render', lo que significa que todo lo que está adentro será evaluado por completo. Si no se procesa un componente grande (como este), podría significar que se podría ejecutar una gran cantidad de código y los resultados se descartarían. – KarlP

45

Puede usar EL si quieres trabajar como si:

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

Cambiar estilos o clases:

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

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

¿hay alguna manera similar de usar un si sin más? – sree

8

puede utilizar "ELSE IF" utilizando operador condicional en el lenguaje de expresión de la siguiente manera:

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

Una posible solución es:

<h:panelGroup rendered="#{bean.row == 10}"> 
    <div class="text-success"> 
     <h:outputText value="#{bean.row}"/> 
    </div> 
</h:panelGroup> 
Cuestiones relacionadas