在示例spring mvc应用程序中,我在控制器中的HttpSession中设置字符串列表,然后尝试通过尝试从会话中检索相同的列表来在JSP中创建下拉框。它不起作用。
JSP中的代码是:
<% java.util.ArrayList<String> userRoleList = (java.util.ArrayList<String>) request.getSession().getAttribute("ROLE_LIST"); %>
<select name="userRole">
<c:forEach var="role" items="${userRoleList}">
<option value="${role}">${role}</option>
</c:forEach>
</select>
会话中的列表有一个字符串,如果我在JSP中打印它,它会按预期显示一条记录。 输出,
<%= userRoleList %>
是
[ROLE_ADMIN]
但无论我做什么,下拉框总是空的。 希望有人可以提供帮助。
答案 0 :(得分:2)
尝试像这样编写select
:
<select name="userRole">
<%
java.util.ArrayList<String> userRoleList = (java.util.ArrayList<String>) request.getSession().getAttribute("ROLE_LIST");
for(String role : userRoleList ) {
%>
<option value="<%=role%>"><%=role%></option>
<% } %>
</select>
答案 1 :(得分:1)
如果你想在JSTL中使用在scriptlet中创建的变量,你必须在pageContext中传递它,如下所示:
<% java.util.ArrayList<String> userRoleList = (java.util.ArrayList<String>) request.getSession().getAttribute("ROLE_LIST");
pageContext.setAttribute("userRoleList", userRoleList);
%>
<select name="userRole">
<c:forEach var="role" items="${userRoleList}">
<option value="${role}">${role}</option>
</c:forEach>
</select>
但是有一个更简单的解决方案:
<select name="userRole">
<c:forEach var="role" items="${ROLE_LIST}">
<option value="${role}">${role}</option>
</c:forEach>
</select>