JSP, JSTL forEach with ArrayList and select box option



我有一个带有表单的 portlet jsp。表单的内容将发送并存储到服务器。下次呈现带有 Portlet 的站点时,将使用先前选择的值预填充表单。这适用于一个例外:我的一个选择框:

.JSP:

// get value chosen before:
<% String projectAssistant = ... %> // This get's the correct string value
<aui:select name="<%=// assistant name %>">
    <c:forEach items="${iStaffList}" var="option">
        <aui:option value="${option}" selected="${option==projectAssistant ? true : false }">${option}</aui:option>
    </c:forEach>
</aui:select>

控制器:

ArrayList<String> staffList = _staffListAdapter.getStaffListAsStrings();
    renderRequest.setAttribute("iStaffList", staffList);

这会导致一个预填充的选择框,其中包含我ArrayList中的所有选项。但是,当我从列表中的第一个选项中选择其他选项,提交然后重新加载页面时,再次预先选择了第一个值,而不是之前选择的值。

我从基本String[]预填充了另一个选择框,这工作正常。这里是工作选择框的代码:.JSP:

// get project status
<% String projectStatus = .... %>
<aui:select name="<%= //projectStatus name %>">
    <c:forEach items="${STATUS_OPTIONS}" var="option">
        <aui:option value="${option}" selected="${option==projectStatus ? true : false }">${option}</aui:option>
    </c:forEach>
</aui:select>

控制器:

renderRequest.setAttribute("STATUS_OPTIONS", ProjectStatusConstants.STATUUS);

哪里

public class ProjectStatusConstants
{
  public static String[] STATUUS = {"", "Draft", "Submitted", "Passed",
                                    "Running", "Closed", "Rejected"};
}

我在ArrayList等方面做错了什么?

亲切问候

编辑:忘了说正确的选择值被发送回服务器...

我的错误是,projectAssistant不存在于我的pageContext - 所以${projectAssistant}不起作用。我以为我也可以通过 EL 访问脚本变量。

为了纠正这一点,我所要做的就是<c:set var="projectAssistant" value="<%=projectAssistant %>" />在我的页面上下文中<% String projectAssistant = ... %>称为projectAssistant

最新更新