java - libreria - jstl+el
si... más dentro de JSP o JSTL (9)
Tengo una especie de pregunta abierta ...
Quiero tener un código HTML basado en la condición (computadora de escritorio / ipad).
Quiero tener fragmentos de código HTML separados para cada una de estas condiciones ...
if (Condition 1)
Some HTML code for con1
else if (Condition 2)
Some HTML code for con2
La condición que quiero probar (en JS) es;
var isiPad = navigator.userAgent.match(/iPad/i) != null;
if (isiPad)
{}
else
{}
Ahora esto tiene que ser implementado en una página .jsp ...
Entonces, ¿cómo hago eso? ¿Debo usar JSTL? ¿Cuál es la mejor manera?
Lo principal es que solo el código correspondiente debe ser cargado / procesado, por ejemplo, si la condición 1 es verdadera, el código HTML en la condición 2 no debe ejecutarse (aparte de estar oculto en el navegador)
¿Debo usar JSTL?
Sí.
Puede usar las etiquetas <c:if>
y <c:choose>
para hacer una representación condicional en jsp utilizando JSTL.
Para simular si , puedes usar:
<c:if test="condition"></c:if>
Para simular si ... de lo contrario , puedes usar:
<c:choose>
<c:when test="${param.enter==''1''}">
pizza.
<br />
</c:when>
<c:otherwise>
pizzas.
<br />
</c:otherwise>
</c:choose>
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 usar dos etiquetas distintas <c:if
- hace que sea más fácil de leer.
En caso de que desee comparar cadenas , escriba la 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>
Puede escribir la condición if-else dentro de <% %>
%% <% %>
en páginas jsp y 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
<%
}
%>
Si desea hacer lo siguiente utilizando JSTL Tag Libe, siga los siguientes pasos:
[Requisito] si un número es mayor que 40 y menor que 50, luego se muestra "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>`
Si solo desea generar un 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: elegir .
Tuve el mismo problema y pensé que no se puede usar Javascript en un JSTL si la condición.
Una especie de solución podría ser 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 debería estar el código html que desea escribir.
<%@ 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>
<%@ 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>