2012-08-17 9 views
8

Quindi ho una selezione per il voto su ciascun argomento. È predefinito e quindi non devo memorizzare i gradi come tabella nel database. Ho una lista di qualifiche e io uso jstl per ognuno come questo: <c:forEach items="${qualificationdetails}" var="qd">.Imposta l'opzione selezionata sul tag di selezione esistente con jstl

Per ogni articolo sto producendo una selezione come questa.

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

E 'possibile impostare l'opzione selezionata utilizzando la mia variabile qd? qualcosa come

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

Ciò aggiungerà un'opzione duplicata alla selezione. Penso che sarebbe un po '"goffo" fare un array con i voti e inviarlo per generare le opzioni. Qualche idea ?

+0

Quando sai quale valore deve essere selezionato come predefinito e come intendi analizzare la pagina? Perché sto pensando che potresti fare ciò che hai proposto lì alla fine del post mentre iterazione, e non dopo che l'iterazione è stata eseguita, in modo da non avere duplicati. Il "qd" contiene una bandiera che indica quale dovrebbe essere selezionato? –

+0

Sì, qd ha e id, nome, grado e anno. Tutte queste informazioni sono disponibili tramite qd. Quindi la proprietà di grado di ogni dato qd avrà un valore di valutazione e dovrebbe essere il mio valore selezionato – Binaryrespawn

risposta

19

Si può semplicemente lasciare che JSP esegua l'attributo selected in modo condizionale.

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

In alternativa, si può solo creare una collezione/gamma di gradi e conservarla nel campo di applicazione in modo che sia disponibile in EL modo che si può ciclo su di esso utilizzando <c:forEach>. Non sono sicuro di come sarebbe "goffo". È possibile utilizzare <c:set> per memorizzarli separati e utilizzare fn:split() per suddividerli per <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> 

In questo modo si finisce con più codice DRY.

Problemi correlati