jsp - 我如何将选项从下拉列表传递到 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
<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) 方法,以便循环仅包含我感兴趣的行。
如果用户重新加载页面,应该记住选择的过滤器,或者如果他们选择另一个选项,则应该更改过滤器。但是我们不需要记住它,如果他们离开页面,稍后再回到页面,那么它应该默认回到“全部”。
解决方案
好的,所以为了解决这个问题,我做了以下事情。
一世。在我的数据 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
<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 然后过滤相应返回的列表。
推荐阅读
- search - 在 COBOL 中搜索和搜索全部
- installation - 在 Inno Setup [Run] 部分中运行另一个程序之前等待(Web)服务器启动
- python - Kivy 以编程方式将项目添加到手风琴
- javascript - 重定向在标头中使用 javascript 找不到的特定 url
- r - 如何在 R 中读取磁盘映像文件 (.img)
- javascript - 从 Firebase 存储中获取图像并使用地图功能渲染它们
- javascript - 如何使用 jquery 自动标记测验
- java - NetBeans 中的错误“Class.forName("com.mysql.jdbc.Driver");"
- ios - 从 lldb 调用 WKWebView 上的方法
- python - 将 2 个子图合并为一个图 matplotlib