JSP,JSTL forEach with ArrayList和select box选项

时间:2017-01-02 16:12:35

标签: java jsp arraylist foreach liferay

我有一个带有表单的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等做错了什么?

亲切的问候

编辑:忘记说正确的选定值会被发送回服务器......

1 个答案:

答案 0 :(得分:0)

我的错误是,我projectAssistant中没有pageContext - 所以${projectAssistant}无效。我以为我也可以通过EL访问scriptlet变量。

要解决此问题,我必须做的就是<c:set var="projectAssistant" value="<%=projectAssistant %>" />在我的网页上下文中将<% String projectAssistant = ... %>称为projectAssistant