21

同じコンテキストで、別のクエリがあります

<select multiple="multiple" name="prodSKUs">
            <c:forEach items="${productSubCategoryList}" var="productSubCategoryList">
          <option value="${productSubCategoryList}"${productSubCategoryList == productSubCategoryName ? 'selected' : ''}>${productSubCategoryList}</option>
         </c:forEach>
        </select>

リクエストの対応する設定は次のようになります

for(int i=0;i<userProductData.size();i++){
    String productSubCategoryName=userProductData.get(i).getProductSubCategory();
    System.out.println(productSubCategoryName);
    request.setAttribute("productSubCategoryName",productSubCategoryName);

}

ここでは、複数の選択ドロップダウンがありますが、forから2つの戻り値を取得しますが、UIでは、2番目のデータではなく1つのデータのみが強調表示されます。コードの何が問題になっていますか?

4

3 に答える 3

29

コンボに入れる要素のコレクション${roles}があり、選択された要素が$ {selected}であるとすると、次のようになります。

<select name='role'>
    <option value="${selected}" selected>${selected}</option>
    <c:forEach items="${roles}" var="role">
        <c:if test="${role != selected}">
            <option value="${role}">${role}</option>
        </c:if>
    </c:forEach>
</select>

更新(次の質問)

属性「productSubCategoryName」を上書きしています。forループの最後で、最後のproductSubCategoryName。

表現言語の制限があるため、これに対処する最善の方法はマップを使用することだと思います。

Map<String,Boolean> map = new HashMap<String,Boolean>();
for(int i=0;i<userProductData.size();i++){
    String productSubCategoryName=userProductData.get(i).getProductSubCategory();
    System.out.println(productSubCategoryName);
    map.put(productSubCategoryName, true);
}
request.setAttribute("productSubCategoryMap", map);

そして、JSPでは:

<select multiple="multiple" name="prodSKUs">
    <c:forEach items="${productSubCategoryList}" var="productSubCategoryList">
        <option value="${productSubCategoryList}" ${not empty productSubCategoryMap[productSubCategoryList] ? 'selected' : ''}>${productSubCategoryList}</option>
    </c:forEach>
</select>
于 2010-04-21T11:55:45.123 に答える
12

サーブレットで行う:

String selectedRole = "rat"; // Or "cat" or whatever you'd like.
request.setAttribute("selectedRole", selectedRole);

次に、JSPで次のことを行います。

<select name="roleName">
    <c:forEach items="${roleNames}" var="role">
        <option value="${role}" ${role == selectedRole ? 'selected' : ''}>${role}</option>
    </c:forEach>
</select>

selectedHTML要素の属性が出力されるため、次の<option>ようになります。

<select name="roleName">
    <option value="cat">cat</option>
    <option value="rat" selected>rat</option>
    <option value="unicorn">unicorn</option>
</select>

問題は別として、これはコンボボックスではありません。これはドロップダウンです。コンボボックスは編集可能なドロップダウンです。

于 2010-04-21T12:00:21.940 に答える
3

本当にシンプル。正しいオプションに文字列「選択済み」を追加する必要があります。次のコードでは、$ {myBean.foo == val?'selected':''}は、オプションの値がBeanの値と同じである場合、文字列'selected'を追加します。

<select name="foo" id="foo" value="${myBean.foo}">
    <option value="">ALL</option>
    <c:forEach items="${fooList}" var="val"> 
        <option value="${val}" ${myBean.foo == val ? 'selected' : ' '}><c:out value="${val}" ></c:out></option>   
    </c:forEach>                     
</select>
于 2014-08-18T19:00:06.767 に答える