JSP、JSTLを使用して、
以下のようなコードで、複数選択可能なセレクトボックスを生成しようとしています。
【要件】
systemSelectItems(Map<String,String>)に格納されている値からセレクトボックスを生成する。
systemSelectItems(Map<String,String>)のKeyの中で、
もしform.systemIdList(List<String>)の値と一致するものがあった場合は、
selectedオプションを付けて選択した状態でセレクトボックスを生成したい。
【問題点】
form.systemIdListの最後の要素と一致するもののみが、
selected:true指定されてセレクトボックスが生成されてしまう。
例えば各変数に以下のようなデータが格納されている状態の場合、
systemSelectItems
A1,A2
B1,B2
C1,C2
form.systemIdList
B2
C2
セレクトボックスは以下のような状態で作成されてほしい。
A2 selected:false
B2 selected:true
C2 selected:true
が以下ような状態となり、
B2はseleted:trueとなることを期待しているが、
falseになってしまう。
A2 selected:false
B2 selected:false
C2 selected:true
【質問内容】
上記の問題を解決する方法について、ご教授頂きたくお願い申し上げます。
HTML
1**JSP** 2 <form:select id="systemId" path="systemIdList" size="5" multiple="multiple" > 3 <c:forEach items="${systemSelectItems}" var="sitem"> 4 <c:set var="selectedSystemFlg" value="false" /> 5 <c:choose> 6 <c:when test="${fn:contains(sitem.key, 'OPTGROUP')}"> 7 <optgroup label="${sitem.value}" /> 8 </c:when> 9 <c:otherwise> 10 <c:forEach items="${form.systemIdList}" var="systemId"> 11 <c:if test="${systemId == sitem.key}" var="selectedSystemFlg" /> 12 </c:forEach> 13 <c:choose> 14 <c:when test="${selectedSystemFlg}"> 15 <option selected="true" value="${sitem.key}" label="${sitem.value}"/> 16 </c:when> 17 <c:otherwise> 18 <option value="${sitem.key}" label="${sitem.value}"/> 19 </c:otherwise> 20 </c:choose> 21 </c:otherwise> 22 </c:choose> 23 </c:forEach> 24 </form:select>
あなたの回答
tips
プレビュー