不刷新页面筛选数据库中的数据

本文介绍了一种不刷新页面筛选数据库数据的方法,通过采用双列表框技术,用户可以在选择前采用模糊查询的方式进行数据定位,从而提高用户体验。

不刷新页面筛选数据库中的数据

我在作asp程序时经常遇到这种情况: 
  将数据库中的数据(如所有雇员名)列在列表框中,程序要求进行选择其中一项或多项提交到下一个页面。 
  但麻烦的是如果数据(如雇员)过多,会给客户的选择带来麻烦--要从很长的列表中进行数据定位。最好的解决方法是用户在选择前采用模糊查询的方式进行数据定位,准确找出需要选择的雇员名,再选择、提交。 
  问题出现在我们程序员面前:如何不刷新页面筛选从数据库中筛选数据。本人的方法有两种: 
  1、采用双列表框的方法 
  2、采用XML方法 
  本文主要介绍第一种方法:采用双列表框的方法 
  编程思想: 
  采用双列表框,其中一个为隐藏状态,另一个是显示给用户看的列表框。 
  程序开始将数据(如雇员姓名)分别装进两个列表框中,当用户需要筛选雇员时首先将显示列表框清空,再更据筛选条件将数据从隐藏列表框装入显示列表框中。 
  这样即可实现不刷新页面筛选数据库中的内容。 
  实现: 
  下面以SQL SERVER为例,筛选NorthWind库中Employees表的雇员名进行说明。


<html> 
<head> 
<title>不刷新页面查询的方法</title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
</head> 
<script language="javascript"> 
function search_onclick(){ 
//得到筛选雇员的名字 
searchtext=window.searchContent.value;

//首先移除在所有查询结果列表中的选项 
j=searchObj.length ; 
for (i = j-1; i>=0; i--) 

searchObj.remove(i); 

if(searchtext!=""){ 
//显示符合筛选条件的雇员 
j=searchSource.length; 
for(i=0;i<j;i++){ 
searchsource=searchSource.options(i).text; 
k=searchsource.indexOf(searchtext); 
if(k!=-1){ 
option1=document.createElement("option"); 
option1.text=searchsource; 
option1.value=searchSource.options(i).value; 
searchObj.add(option1); 



else{ 
//如果没有输入查询条件则显示所有雇员 
j=searchSource.length; 
for(i=0;i<j;i++){ 
searchsource=searchSource.options(i).text; 
option1=document.createElement("option"); 
option1.text=searchsource; 
option1.value=searchSource.options(i).value; 
searchObj.add(option1); 

   } 
}

</script> 
<body bgcolor="#FFFFFF" text="#000000"> 
<% 
servername="wyb" '服务器名 
user="sa" '用户名 
pw="" '用户密码 
databasename="northwind" '数据库名 
set conn=server.CreateObject("adodb.connection") 
conn.Open "DRIVER=SQL Server;SERVER="&servername&";UID="&user&";pwd="&pw&";DATABASE="&databasename 
set rs=server.CreateObject("adodb.recordset") 
sql="Select employeeid,lastname from employees order by employeeid" 
rs.Open sql,conn%> 
<table width="80%" border="1"> 
<tr> 
<td> 
<input type="text" name="searchContent"> 
<input type="button" name="Button" value="查询" onclick="javascript:return search_onclick()"> 
</td> 
</tr> 
<tr> 
<td> 查询结果<br> 
<select name="searchObj" size="10"> 
<%do while not rs.eof%> 
<option value="<%=rs("employeeid")%>"><%=rs("lastname")%></option> 
<%rs.movenext 
loop 
%> 
</select> 

<think>首先,用户的问题是:"我想查找使用JSP获取form表单中的值,进行筛选刷新当前页面的方法。请问JSP获取form表单的值进行筛选刷新当前页面的实现方法?" 我需要基于系统级指令和用户的问题构建回答。系统级指令要求: - 所有行内数学表达式使用$...$格式(但这里可能涉及数学,因为是JSP编程)。 - 独立公式使用$$...$$格式(同样,可能合适)。 - LaTeX语法正确(但内容主要是编程,所以可能用代码块)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识(例如:[^1])。 用户提供了三个引用: - 引用[1]:显示了一个JSP表单代码片段,使用Spring的<form:form>和<form:select>。 - 引用[2]:讨论了MVC模式,Servlet作为控制器,JSP作为视图。 - 引用[3]:描述了功能模块,包括添加、删除、更新和查询操作。 用户说:"上述引用仅供参考,并是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。" 但我没有用户上一次的问题历史,所以我要专注于当前问题和提供的引用。 关键点是:用户想知道如何在JSP中获取表单值,进行筛选筛选意味着查询或过滤数据),然后刷新当前页面。 在JSP和Servlet上下文中,获取表单值通常通过Servlet处理请求参数,然后刷新页面可能涉及重定向或转发。 引用[1]展示了<form:form>,可能使用了Spring MVC框架,因为在JEE项目中常见。引用[2]强调MVC模式,其中Servlet处理逻辑,JSP显示结果。所以,我应该建议使用Servlet来处理表单提交。 步骤分解: 1. **表单提交**:在JSP中,表单使用method="post"提交到Servlet。 2. **获取表单值**:在Servlet中,使用request.getParameter()或相关方法来获取输入值。 3. **进行筛选**:基于表单值执行数据库查询或业务逻辑。 4. **刷新当前页面**:这通常意味着重新加载同一个页面,但带有筛选后的数据。可以使用转发(forward)或重定向(redirect)。转发会保持URL变,但内容更新;重定向会让浏览器重新请求页面。 从引用[1],表单action="${ctx}/trust/loanBalance/",所以提交到这个URL。在Servlet中处理这个请求。 引用[3]提到查询功能,需要刷新显示结果集。 所以,实现方法: - 创建Servlet来处理表单提交(如引用[2]的MVC模式)。 - 在Servlet的doPost方法中: - 获取表单参数。 - 执行筛选逻辑(如数据库查询)。 - 存储结果在请求作用域。 - 转发回同一个JSP页面。 - 在JSP页面中,显示筛选后的数据刷新页面:如果使用转发,页面URL变,但内容更新。如果筛选后需要更改URL,可以用重定向,但重定向后需要传递参数来保持状态。 在引用[1]的表单中,有multiple="true",表示多选,所以parameter可能是一个数组。 回答结构: - 清晰步骤。 - 提供代码示例(基于引用)。 - 由于是系统级指令,需要生成相关问题。 - 使用中文。 最终回答结构: 1. 解释整体方法(基于MVC)。 2. 步骤分解。 3. 代码片段(JSP和Servlet)。 4. 注意事项。 5. 生成相关问题。 引用:自然地添加引用标识。例如,提到MVC模式时引用[^2],提到查询功能时引用[^3]。 相关问题:生成3个左右相关问题,涉及JSP表单处理。 </think>### JSP获取表单值进行筛选刷新当前页面的实现方法 在JSP中获取表单值、执行筛选(如数据库查询或数据过滤),并刷新当前页面,是Web开发中的常见需求。基于MVC模式(引用[2]),最佳实践是使用Servlet作为控制器处理表单提交,JSP作为视图显示结果。以下是详细实现步骤和示例代码,确保逻辑清晰、高效可靠。 #### 核心原理 - **MVC模式**:表单提交由Servlet处理(控制器),执行筛选逻辑后,将结果转发回JSP页面(视图),实现页面刷新(引用[2])。 - **表单提交流程**: 1. JSP表单提交数据到Servlet。 2. Servlet获取参数、执行筛选(如SQL查询)。 3. Servlet将结果存储在请求作用域(request scope)。 4. 转发(forward)或重定向返回原JSP页面,实现刷新。 - **刷新机制**: - **转发(forward)**:URL变,内容更新;适用于筛选数据显示(推荐)。 - **重定向(redirect)**:URL改变,浏览器重新请求;适用于需要更新URL的场景。 筛选后的数据刷新通常使用转发(引用[3])。 #### 步骤分解 1. **创建JSP表单页面** 在JSP中定义表单,设置提交目标和参数。例如,引用[1]中的`<form:form>`示例,但需适配标准JSP标签: ```jsp <%-- 表单提交到Servlet路径:${ctx}/filterData --%> <form id="searchForm" action="${pageContext.request.contextPath}/filterData" method="post"> <%-- 多选示例,name属性用于Servlet获取参数 --%> <select name="selectedItems" multiple="true"> <option value="item1">Item 1</option> <option value="item2">Item 2</option> </select> <input type="submit" value="筛选" /> </form> ``` - `action`指定Servlet URL(例如`${pageContext.request.contextPath}/filterData`)。 - `method="post"`确保数据安全提交。 - 多选参数使用`name="selectedItems"`,Servlet中可通过数组获取(引用[1])。 2. **编写Servlet处理表单提交** 创建Servlet(如`FilterDataServlet.java`),在`doPost`方法中: - 获取表单参数(使用`request.getParameterValues()`处理多选)。 - 执行筛选逻辑(如数据库查询)。 - 将结果存入请求作用域。 - 转发回原JSP页面。 ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; import java.util.Arrays; import java.util.List; public class FilterDataServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 获取表单值(数组用于多选) String[] selectedItems = request.getParameterValues("selectedItems"); if (selectedItems != null) { // 2. 执行筛选逻辑(示例:数据库查询或过滤) List<String> filteredData = filterData(selectedItems); // 自定义筛选方法 // 3. 结果存入请求作用域 request.setAttribute("filteredResults", filteredData); } // 4. 转发回原JSP页面刷新当前页面) RequestDispatcher dispatcher = request.getRequestDispatcher("/originalPage.jsp"); dispatcher.forward(request, response); } // 示例筛选方法:实际中替换为数据库查询(如引用[3]的SQL操作) private List<String> filterData(String[] items) { // 模拟筛选逻辑,实际应用中调用DAO层执行SQL return Arrays.asList(items); // 返回筛选结果列表 } } ``` - **关键点**: - 使用`request.getParameterValues("selectedItems")`获取多选值(数组形式)。 - 筛选逻辑应在Servlet中完成,避免在JSP嵌入业务代码(引用[2])。 - `request.setAttribute()`存储结果,供JSP显示。 - `dispatcher.forward()`转发回原页面,实现刷新(URL变)。 3. **在JSP中显示筛选结果** 在原JSP页面(如`originalPage.jsp`),使用JSTL或EL表达式渲染结果: ```jsp <%-- 显示筛选结果 --%> <c:if test="${not empty filteredResults}"> <h3>筛选结果:</h3> <ul> <c:forEach items="${filteredResults}" var="item"> <li>${item}</li> </c:forEach> </ul> </c:if> ``` - 当Servlet转发回页面时,`filteredResults`自动填充,实现数据刷新。 #### 注意事项 - **MVC分离原则**:业务逻辑(筛选)应在Servlet或Service层,JSP仅负责显示(引用[2])。 - **数据库集成**:筛选逻辑通常涉及SQL查询(如引用[3]所述),使用JDBC或ORM框架(如Hibernate)。 - **错误处理**:添加代码验证参数有效性,避免空值异常。 - **性能优化**:大数据量时,使用分页查询防止页面冻结(引用[3])。 - **框架支持**:如使用Spring MVC(引用[1]中的`<form:form>`),可简化参数绑定: - 在Controller中,使用`@RequestMapping`和`@ModelAttribute`自动映射表单值。 #### 相关问题 1. **如何在JSP中处理表单多选参数的获取和验证?** 2. **Servlet转发与重定向有什么区别?如何选择?** 3. **如何将JSP表单筛选功能集成到数据库查询中?** [^2]: MVC模式确保逻辑分离。 [^3]: 查询功能需刷新显示结果集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值