<select name="books" id="sel" class="form-control selectpicker"
data-live-search="true" multiple="multiple">
<c:forEach items="${map }" var="m">
<optgroup label="${m.key }">
<c:forEach items="${m.value }" var="book">
<c:set var="flag" value="true"></c:set>
<c:forEach items="${channel.books }" var="b">
<c:if test="${b.category2.name==m.key }">
<c:if test="${book.name==b.name }">
<c:set var="flag" value="false"></c:set>
<option value="${book }" selected="selected">${book.name}</option>
</c:if>
</c:if>
</c:forEach>
<c:if test="${flag }">
<option value="${book }">${book.name}</option>
</c:if>
</c:forEach>
</optgroup>
</c:forEach>
</select>我做的是一个多选下拉框,当编辑该页面时,已有的数据要选中。
部分截图

后端的话这么写
for(int i = 0; i < 10; i++) {
boolean flag = true;
for(int j = 0; j < 10; j++) {
if(i == j) {
flag = false;
...
}
}
if(flag) {
...
}
}jstl这样
<c:forEach items="${m.value }" var="book">
<c:set var="flag" value="true"></c:set>
<c:forEach items="${channel.books }" var="b">
<c:if test="${b.category2.name==m.key }">
<c:if test="${book.name==b.name }">
<c:set var="flag" value="false"></c:set>
<option value="${book }" selected="selected">${book.name}</option>
</c:if>
</c:if>
</c:forEach>
<c:if test="${flag }">
<option value="${book }">${book.name}</option>
</c:if>
</c:forEach>差不多就这样了。这个问题我在后端做过好几次,换到前端以jstl的形式,让我活活搞了一天,我真的快吐血了……
溜了溜了
本文介绍了如何在前端使用JSTL进行两层循环,并处理已选中的数据,特别是在编辑页面时确保已有数据被选中。通过分享后端和JSTL前端的代码示例,作者展示了在解决这个问题上遇到的挑战。


被折叠的 条评论
为什么被折叠?



