2012-08-17 2 views
8

So habe ich eine Auswahl für die Note zu jedem Thema. Es ist vordefiniert und daher muss ich Noten nicht als Tabelle in der Datenbank speichern. Ich habe eine Liste von Qualifikationen und ich benutze jstl für jeden wie folgt: <c:forEach items="${qualificationdetails}" var="qd">.Setzen Sie ausgewählte Option auf bestehenden Select-Tag mit JSTL

Für jeden Artikel, den ich produziere eine Auswahl wie folgt.

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

Ist es möglich, die gewählte Option mit meiner Variable qd zu setzen? etwas wie

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

Dies wird eine doppelte Option zum Auswählen hinzufügen. Ich denke, es wäre etwas "klobig", ein Array mit den Noten zu erstellen und es für die Generierung der Optionen zu senden. Irgendwelche Ideen ?

+0

Wann wissen Sie, welcher Wert als Standard ausgewählt werden sollte und wie Sie ihn auf der Seite analysieren möchten? Weil ich denke, dass Sie das, was Sie dort vorgeschlagen haben, am Ende des Posts während der Iteration und nicht nach der Iteration tun können, so dass Sie keine Duplikate haben. Hat das "qd" eine Flagge, die angibt, welche ausgewählt werden soll? –

+0

Ja, qd hat und ID, Name, Klasse und Jahr. All diese Informationen sind über qd verfügbar. Also wird die Grad-Eigenschaft eines gegebenen qd einen Grad-Wert haben und das sollte mein gewählter Wert sein – Binaryrespawn

Antwort

19

Sie könnten JSP einfach das selected-Attribut bedingt rendern lassen.

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

Alternativ können Sie nur eine Sammlung/Array von Typen erstellen und speichern sie in den Anwendungsbereich, so dass es in EL vorhanden ist, so dass Sie eine Schleife über sie <c:forEach> Verwendung kann. Ich bin mir nicht sicher, wie das "klobig" wäre. Sie könnten <c:set> verwenden, um sie gemeinsam zu speichern und fn:split() verwenden, um sie für <c:forEach> zu teilen.

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

diese Weise können Sie mit mehr DRY Code am Ende.