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


283

Quiero generar un código HTML basado en alguna condición en un archivo JSP.

if (condition 1) {
    Some HTML code specific for condition 1
}
else if (condition 2) {
    Some HTML code specific for condition 2
}

¿Cómo puedo hacer eso? ¿Debo usar JSTL?


1
Exampledepot tiene algunos buenos ejemplos. Eche un vistazo> exampledepot.8waytrips.com/egs/javax.servlet.jsp.jstl.core/…
darkapple

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>

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 .


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.


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>

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>

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>

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>

0
<c:if test="${any_cond}" var="condition">
    //if part
</c:if>
<c:if test="${!condition}">
    //else part
</c:if>

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

-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
    <%
        }
    %>

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

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.