将下拉菜单设置为'已选中'在JSTL For循环中

时间:2016-04-13 04:23:01

标签: jsp jstl

我基本上是在JSP页面中循环遍历Arraylist,我可以使用选项成功填充Dropdown。

<select id="perm_bmi_stable" name="perm_bmi_stable" class="col-md-12 form-control">
    <optgroup label="Stability">
        <c:forEach items="${versions}" var="version">
            <option value="${version.versionName}"> ${version.versionName </option>
        </c:forEach>
    </optgroup>
</select>

现在我需要在下拉列表中将正确的值设置为选择,具体取决于 version.versionName 值的值。

在for循环生成后,Dropdown包含以下值:

  • 1.0
  • 2.0
  • 3.0
  • 4.0

如果version.versionName中的值是例如2.0,我需要循环将 2.0 设置为下拉列表的选项。

如何将此if条件添加到for循环中?

我试过这个,但它不起作用:

<option value="${version.versionName}" <c:if test="${versions[0].versionName == '${version.versionName}'}"> <c:out value="selected=selected"></c:out></c:if>>${version.versionName}</option>

2 个答案:

答案 0 :(得分:1)

它没有用,因为你没有正确使用表达式语言

$ {....}包含EL表达式而不是EL变量 与String文字不同的变量不需要EL表达式中的引号

因此这不起作用

<option value="${version.versionName}" <c:if test="${versions[0].versionName == '${version.versionName}'}"> <c:out value="selected=selected"></c:out></c:if>>${version.versionName}</option>

这应该有效。 注意:您可能希望在所选属性周围添加引号以使其具有一致的符号

<option value="${version.versionName}" <c:if test="${versions[0].versionName == version.versionName}"> <c:out value='selected="selected"'></c:out></c:if>>${version.versionName}</option>

为了提高可读性,如果不是严格必要的话,你可能想要删除c:out标签并使用三元运算符

注意:在这种情况下,如果您想在所选属性周围使用双引号,则可以创建一个在EL表达式内使用的var,而不是在引号之间创建冲突

<c:set var="sel" value='selected = "selected"'>

<option value="${version.versionName}" "${versions[0].versionName == version.versionName ? sel : ''}"> ${version.versionName}</option>

答案 1 :(得分:0)

在Ternary运算符

的帮助下试一试
 <option value="${version.versionName}" ${versions[0].versionName == version.versionName?'selected=selected':''} >${version.versionName}</option>