si ... más dentro de JSP o JSTL

Respuestas:

536

¿Debo usar JSTL?

Si.

Puede usar <c:if>y <c:choose>etiquetas para hacer renderizado condicional en jsp usando JSTL.

Para simular si , puede usar:

<c:if test="condition"></c:if>

Para simular si ... de lo contrario , puede usar:

<c:choose>
    <c:when test="${param.enter=='1'}">
        pizza. 
        <br />
    </c:when>    
    <c:otherwise>
        pizzas. 
        <br />
    </c:otherwise>
</c:choose>
Jigar Joshi
fuente
Gracias por eso ... En realidad, estoy más interesado en el desarrollo de la interfaz de usuario ... Así que no tengo mucho conocimiento de JSTL ... ¿Podrías proporcionarme un ejemplo de trabajo similar de JSTL ... Quiero decir para
if..else
Gracias por el ejemplo ... La condición que tengo es en realidad una condición JS ... si navigator.userAgent.match (/ iPad / i)! = Null Entonces, ¿puedo escribir eso directamente en if test = "condition" ...
testndtv
1
así JSTL se ejecutará en el extremo del servidor lo hará caja de HTML fuera de él y pasarlo al cliente
Jigar Joshi
Ok ... eso está bien ... Pero para la condición real, es decir, en la prueba = "condición" ... ¿Puedo especificar cualquier condición JS y, en caso afirmativo, puedo escribirla directamente, por ejemplo, puedo escribir <c: when test = "navigator .userAgent.match (/ iPad / i)! = null; ">
testndtv
¿Puede actualizar su pregunta con la condición que desea probar?
Jigar Joshi
170

Si solo desea generar texto diferente, un ejemplo más conciso sería

${condition ? "some text when true" : "some text when false"}

Es mucho más corto que c: elige .

KIR
fuente
es esto javascript o .jsp?
otherDewi
1
no funciona cuando se utiliza una variable booleana como condición ¿sugiere alguna?
Adnane.T
¿Esto debe estar encerrado en una etiqueta especial, o simplemente pegarlo directamente en HTML?
CodyBugstein
55
@otherDewi: es JSTL, que se puede usar en un archivo JSP. Sin embargo, el operador condicional o ternario existe en muchos otros idiomas, incluido Javascript.
bergie3000
2
@ bergie3000: No , esto no es JSTL . Este es EL .
BalusC
105

El constructo para esto es:

<c:choose>
   <c:when test="${..}">...</c:when> <!-- if condition -->
   <c:when test="${..}">...</c:when> <!-- else if condition -->
   <c:otherwise>...</c:otherwise>    <!-- else condition -->
</c:choose>

Si la condición no es costosa, a veces prefiero simplemente usar dos <c:ifetiquetas distintas : hace que sea más fácil de leer.

Bozho
fuente
44
¿Puedo suponer que si primero cuando se cumple la condición, el segundo cuando no se ejecutará?
Salta el
porque obtienes asistencia de contenido lista para usar, para empezar. Y debido a que webdevs puede usarlo sin aprender otro dsl
Bozho
11
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<c:set var="val" value="5"/>
<c:choose> 
  <c:when test="${val == '5'}">
    Value is 5
  </c:when>
  <c:otherwise>
    Value is not 5
  </c:otherwise>
</c:choose>
Hiren Odedra
fuente
10

En caso de que desee comparar cadenas , escriba el siguiente JSTL:

<c:choose>
    <c:when test="${myvar.equals('foo')}">
        ...
    </c:when>
    <c:when test="${myvar.equals('bar')}">
        ...
    </c:when>
    <c:otherwise>
        ...
    </c:otherwise>
</c:choose>
Aebersold
fuente
Creo que solo puede invocar métodos (como .equals) en nuevos contenedores (ish), como Tomcat 7+.
Anillo
6

manera simple :

<c:if test="${condition}">
    //if
</c:if>
<c:if test="${!condition}">
    //else
</c:if>
Milad Heidari
fuente
2
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<c:set var="isiPad" value="value"/>
<c:choose>
   <!-- if condition -->
   <c:when test="${...}">Html Code</c:when> 
   <!-- else condition -->
   <c:otherwise>Html code</c:otherwise>   
</c:choose>
Bhushan Sanghavi
fuente
0
<c:if test="${any_cond}" var="condition">
    //if part
</c:if>
<c:if test="${!condition}">
    //else part
</c:if>
Sachin Kumar
fuente
-1

Si desea hacer lo siguiente utilizando JSTL Tag Libe, siga los siguientes pasos:

[Requisito] si un número es mayor que igual a 40 y menor a 50, entonces visualice "Número de dos dígitos que comienza con 4", de lo contrario, "Otros números".

[Soluciones]

1. Please Add the JSTL tag lib on the top of the page.`
     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>`

2. Please Write the following code
`
<c:choose>
       <c:when test="${params.number >=40 && params.number <50}">
              <p> Two digit number starting with 4. </p>
       </c:when>
       <c:otherwise>
              <p> Other numbers. </p>
       </c:otherwise>
  </c:choose>`
usuario3466950
fuente
-1

Puede escribir la condición if-else dentro <% %>de las páginas jsp y el código html fuera de<% %>

Por ejemplo:

   <%
        String username = (String)session.getAttribute("username");
        if(username==null)  {
    %>            
        <p> username is null</p> //html code
    <%
        } else {
    %>
        <p> username is not null</p> //html code
    <%
        }
    %>
Shivam
fuente
-1

En caso de que desee comparar cadenas, escriba el siguiente JSTL:

<c:choose>
    <c:when test="${myvar.equals('foo')}">
        ...
    </c:when>
    <c:when test="${myvar.equals('bar')}">
        ...
    </c:when>
    <c:otherwise>
        ...
    </c:otherwise>
</c:choose>
Mohammad Sherafatian
fuente
-1
<c:choose>
<c:when test="${not empty userid and userid ne null}">
      <sql:query dataSource="${dbsource}" var="usersql">
                SELECT * FROM newuser WHERE ID = ?;
                <sql:param value="${param.userid}" />
      </sql:query>
 </c:when>
 <c:otherwise >
       <sql:query dataSource="${dbsource}" var="usersql">
                 SELECT * FROM newuser WHERE username = ?;
                 <sql:param value="${param.username}" />
       </sql:query>                              
  </c:otherwise>

Aman Kumar
fuente
Puede proporcionar la solución, pero considere agregar algunos detalles con el código
Patel Romil
-2

Tuve el mismo problema y pensé que no puedes usar Javascript en una condición JSTL if .

Una solución alternativa podría estar en Javascript:

<script>

    var isiPad = navigator.userAgent.match(/iPad/i) != null;

    if (isiPad) {
        document.write("Some HTML code for con1");
    } else {
        document.write("Some HTML code for con2");
    }

</script>

Tendrá que colocar este script donde debe estar el código html que desea escribir.

Guillaume Tako
fuente