首页 > 解决方案 > 我如何将选项从下拉列表传递到 foreach 中的数据 bean 方法

问题描述

免责声明:我对 JSP 完全陌生,所以我正在寻找一个简单的解决方案来解决这个问题。

我有一些创建 HTML 表的 JSP。顶部有一个标题,然后从数据 bean 中检索各个行,并在循环中创建每行的 HTML。

下面是 JSP 的简短片段。

<table width="100%" cellpadding="3">
<tr style="vertical-align:center;">
    <th>
        Event
    </th>
    <th>
        Scheduled
    </th>
    <th>
        Due Date
    </th>
    <th>
        Status&nbsp;
        <select name="statusFilter" onChange="location.reload()">
            <c:forEach var="filter" items="${dataBean.getStatusFilters()}">
                <option value="${filter}">${filter}</option>
            </c:forEach>
        </select>
    </th>
</tr>
<c:forEach var="event" items="${dataBean.getApsEvents(statusFilter.value)}" varStatus="status">

如您所见,Status 列中添加了一个下拉列表,用于过滤出现在标题下方的行中的值。下拉列表确实显示了指定的值。

但是,我在 getApsEvents(filter) 方法中添加了一条日志记录行,以输出发送到该方法的值,并且该值始终为空字符串。

我需要进行哪些更改以便用户可以选择一个选项,并将该选项作为参数传递给 bean 上的 getApsEvents(filter) 方法,以便循环仅包含我感兴趣的行。

如果用户重新加载页面,应该记住选择的过滤器,或者如果他们选择另一个选项,则应该更改过滤器。但是我们不需要记住它,如果他们离开页面,稍后再回到页面,那么它应该默认回到“全部”。

标签: jsp

解决方案


好的,所以为了解决这个问题,我做了以下事情。

一世。在我的数据 bean 上,我添加了一个带有 getter 和 setter 的 statusFilter 属性。

ii. 我将 JSP 文件更改为以下内容(在表单中选择):

<table width="100%" cellpadding="3">
<tr style="vertical-align:center;">
    <th>
        Event
    </th>
    <th>
        Scheduled
    </th>
    <th>
        Due Date
    </th>
    <th>
        Status&nbsp;
        <form action="/thePage.html" method="POST">
            <select name="statusFilter">
                <c:forEach var="filter" items="${dataBean.getStatusFilters()}">
                    <option value="${filter}" <c:if test="${filter == dataBean.statusFilter}">selected="selected"</c:if>>${filter}</option>
                </c:forEach>
            </select>
            <input type="submit" value="Submit"/>
        </form>
    </th>
</tr>
<c:forEach var="event" items="${dataBean.apsEvents}" varStatus="status">

这添加了下拉菜单,并允许我重新提交表单,该表单在数据 bean 上设置了参数。在 forEach 循环中使用的数据 bean 上的标准 getter 然后过滤相应返回的列表。


推荐阅读