从会话属性创建下拉列表

时间:2016-01-12 20:59:23

标签: java jsp spring-mvc

在示例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]

但无论我做什么,下拉框总是空的。 希望有人可以提供帮助。

2 个答案:

答案 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>