2009-11-19 9 views
5

Algunas etiquetas html interpretan "cualquier" valor de un atributo give como "verdadero" -> las etiquetas de opción vienen a la mente.Cómo generar <opción seleccionada = "verdadero"> de JSPX?

frecuencia termino haciendo algo como esto:

<c:choose> 
    <c:when test="${isSelected}"/> 
     <option selected="true">Opt1</option> 
    </c:when> 
    <c:otherwise/> 
     <option>Opt1</option> 
    </c:otherwise> 
</c:choose> 

Sé que puedo declarar una medida para encapslate este comportamiento, pero que también se pone muy fea, a menos que codificaré en Java.

¿Existe alguna forma más inteligente de hacerlo?

Respuesta

0

Sí, una forma más inteligente sería escribir

<option selected="selected">Opt1</option> 

ya que eso es lo que hay mandated by XHTML.

Yo sé que no es lo que realmente está pidiendo :-) Creo que el camino está bien o puede utilizar una expresión condicional en su lugar:

<option ${isSelected?"selected=\"selected\"":""}>Opt1</option> 

Es más corto aunque no necesariamente más bonita.

+0

Niza respuesta, lástima que no funciona aquí. ¿Qué versión de jspx hace esto por ti? ¿Estás seguro de que esto no es jsp? – krosenvold

+0

Lo siento, de hecho es JSP; Los tengo cruzados. Supongo que tu camino es el único aplicable entonces; c: si no funcionará en este caso tampoco. – ChssPly76

1

Una forma de abordar esto sería usar etiquetas personalizadas.

Me gusta el enfoque que el convertidor JSP2X toma, definir etiquetas personalizadas en su carpeta WEB-INF/etiquetas que le permiten hacer esto:

<jspx:element name="option"> 
    <c:if test="${selected}"> 
     <jspx:attribute name="selected">selected</jspx:attribute> 
    </c:if> 
    <jspx:body>Opt1</jspx:body> 
</jspx:element> 

Un enfoque más compacto podría ser la creación de una etiqueta personalizada específicamente para una opción que hizo lo correcto, tomando un valor booleano para el atributo seleccionado, emitiendo un atributo = seleccionado "seleccionado" si es verdadero, de lo contrario. Este sería un poco más compacto:

<jspx:option selected="${selected}">Opt1</option> 
+0

No pensé c: si los condicionales estaban permitidos dentro de las etiquetas de elemento. ¿Es eso un cambio en las especificaciones posteriores? – krosenvold

+0

Estos jspx: elemento no está en la especificación, es una etiqueta personalizada eliminada por JSP2X. –

+0

* suspiro * Desearía poder editar estos comentarios. =) –

0

Para el problema <select><option selected="selected">, decidí que no me importa un poco de verbosidad, si era sólo un tiempo verbosidad ... así que creé un documento de etiqueta (.tagx) en /WEB-INF/tags/select.tagx así:

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 

    <jsp:directive.attribute name="id" required="true" /> 
    <jsp:directive.attribute name="name" required="true" /> 
    <jsp:directive.attribute name="options" required="true" /> 
    <jsp:directive.attribute name="selected" required="true" /> 

    <select id="${id}" name="${name}"> 
    <c:forEach var="opt" items="${options}"> 
     <c:choose> 
     <c:when test="${opt == selected}"><option selected="selected">${opt}</option></c:when> 
     <c:otherwise><option>${opt}</option></c:otherwise> 
     </c:choose> 
    </c:forEach> 
    </select> 
</jsp:root> 

y usarlo de esta manera:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<html xmlns="http://www.w3.org/1999/xhtml" version="2.1" 
    ... 
    xmlns:form="urn:jsptagdir:/WEB-INF/tags/"> 

    ... 

    <head> 
     ... 
    </head> 
    <body> 
     <form method="POST" commandName="loginRequest" action="index_login.html"> 
      <fieldset id="loginFieldSet"> 
       ... 

       <div> 
        <label for="day" path="day">Favourite day: </label> 
        <form:select id="day" name="day" selected="Saturday" 
         options="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday" /> 
       </div> 
      </fieldset> 
      <div> 
      <input type="submit" tabindex="3" /> 
      <input type="reset" tabindex="4" /> 
      </div> 
     </form> 
    </body> 
</html> 

krosenvold, no estoy de acuerdo que este es feo ... tal vez molesto, pero estoy realmente me alegro de no tener que w rite cualquier código para esto. Una vez que haya definido la etiqueta, sus JSPX estarán mucho más ordenados. Además, simplemente no creo que haya un atajo para esto.

+0

Solo use el operador ternario en EL. '

+0

¿Has probado esto realmente? No funciona, es un XML totalmente inválido. –

0

Hay otra forma de evitar esto. Es un poco un truco, pero una alternativa al uso de un taglib o elegir dónde duplicar la etiqueta que descubrí funciona bastante bien.

Usted puede construir la etiqueta dentro de una etiqueta conjunto jstl como el valor, algo como esto:

<c:set var="mytag" value="&lt; option ${isSelected ? 'selected='\true\' : '' } &gt;"> 

Entonces, dondequiera que usted quiere esa etiqueta, que acaba de salida como esta:

${mytag} 
Cuestiones relacionadas