2012-08-17 16 views
8

Así que tengo una selección para la calificación en cada tema. Está predefinido y, por lo tanto, no tengo que almacenar calificaciones como una tabla en la base de datos. Tengo una lista de calificaciones y estoy usando jstl para cada una como esta: <c:forEach items="${qualificationdetails}" var="qd">.Establecer la opción seleccionada en la etiqueta de selección existente con jstl

Para cada artículo estoy produciendo una selección como esta.

<select class="grade" title="Grade Obtained"> 
            <option value="1">1</option> 
            <option value="2">2</option> 
            <option value="3">3</option> 
            <option value="A">A</option> 
            <option value="B">B</option> 
            <option value="C">C</option> 
            <option value="D">D</option> 
            <option value="E">E</option> 
</select> 

¿Es posible establecer la opción seleccionada usando mi variable de qd? algo así como

<option value="${qd.grade}" selected="selecetd">${qd.grade}</option> 

Esto añadirá una opción duplicado a la selección. Creo que sería un poco "torpe" hacer una matriz con las calificaciones y enviarla de forma cruzada para generar las opciones. Algunas ideas ?

+0

¿Cuándo sabe qué valor debe seleccionarse como predeterminado y cómo piensa analizarlo en la página? Porque estoy pensando que podría hacer lo que propuso allí al final de la publicación mientras se itera, y no después de que se realiza la iteración, de modo que no tenga duplicados. ¿La "qd" contiene una bandera que indica cuál debe seleccionarse? –

+0

Sí, qd tiene ID, nombre, grado y año. Toda esta información está disponible a través de qd. Entonces la propiedad de grado de cualquier qd dada tendrá un valor de grado y ese debería ser mi valor seleccionado – Binaryrespawn

Respuesta

19

Puede dejar que JSP represente el atributo selected condicionalmente.

<select class="grade" title="Grade Obtained"> 
    <option value="1" ${qd.grade == '1' ? 'selected' : ''}>1</option> 
    <option value="2" ${qd.grade == '2' ? 'selected' : ''}>2</option> 
    <option value="3" ${qd.grade == '3' ? 'selected' : ''}>3</option> 
    <option value="A" ${qd.grade == 'A' ? 'selected' : ''}>A</option> 
    <option value="B" ${qd.grade == 'B' ? 'selected' : ''}>B</option> 
    <option value="C" ${qd.grade == 'C' ? 'selected' : ''}>C</option> 
    <option value="D" ${qd.grade == 'D' ? 'selected' : ''}>D</option> 
    <option value="E" ${qd.grade == 'E' ? 'selected' : ''}>E</option> 
</select> 

Como alternativa, puede simplemente crear una colección/serie de grados y almacenarlo en el ámbito de aplicación para que esté disponible en EL para que pueda reproducir indefinidamente usando <c:forEach>. No estoy seguro de cómo sería eso "torpe". Puede usar <c:set> para almacenarlos separados por comas y usar fn:split() para dividirlos por <c:forEach>.

<c:set var="grades" value="1,2,3,A,B,C,D,E" scope="application" /> 
<select class="grade" title="Grade Obtained"> 
    <c:forEach items="${fn:split(grades, ',')}" var="grade"> 
     <option value="${grade}" ${qd.grade == grade ? 'selected' : ''}>${grade}</option> 
    </c:forEach> 
</select> 

De esta manera se termina con más código DRY.

Cuestiones relacionadas