我目前有一个 JSP 页面,其中包含一个表单。
在提交此表单时,我想重新加载同一页面,并在提交表单之前使用用户输入值填充表单。搜索结果将在页面上输出。
我已成功将搜索结果输出到页面上,但想要一些关于如何在页面重新加载时将输入值保留在表单元素中的建议。
我确实通过 struts 2 Ajax 库加载了搜索结果,但是如果出现验证错误,ajax 请求将返回完整的 jsp 页面本身,而不是搜索结果,因为出现错误时页面应该重新加载自身并显示操作错误。结果,我放弃了使用 Ajax 加载搜索结果。
#1:经典方式
如果您发送form
fromsearch.jsp
到search.action
,并且在 SUCCESS 上,您将在 中加载结果searchResult.jsp
,并searchResult.jsp
包含与搜索条件相同的表单(显然是带有搜索结果的网格),以便保留并自动重新填充您的条件'已经写在上一页,你需要:
search.jsp
标记 searchResult.jsp
;实际上,我建议您创建一个 JSP 片段并将其包含在两个 JSP 中<jsp:include/>
,以避免代码冗余(两个不同页面中的两个相同形式);search.action
,由 设置search.jsp
和读取searchResult.jsp
。没有 AJAX 参与其中,正如 Dave 所说,这是微不足道的。
#2:AJAX 方式
如果您改为使用 AJAX,那么您的表单将被发布,但您的页面将保持不变,只会填充目标 div(包含搜索结果的 div)。
在这种情况下,将保留数据,因为不会重新加载页面。
从理论上讲,在您的搜索条件中,searchAJAX.action
您只需要设置器,因为它们只需要设置,而不是回读。
顺便说一下,将您的 SUCCESS 结果加载到 div 中,将导致需要加载 JSP 片段,而不是整个 JSP。返回的 JSP 片段将被注入到原始页面的正文中,然后它应该只包含相关的 HTML(和 struts-tags 定义),不包含 DTD <html>
、、<head>
或<body>
元素。
这对 SUCCESS 有效,但对 ERROR 结果也有效。
如果您将整个 JSP 页面作为全局错误或操作本地错误结果返回,那么您将在页面中拥有一个页面,就像您所做的那样。
解决方案是使用
ERROR 的 JSP 片段示例:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<strong>OOOOPS an error occurred !</strong>
显然,另一种方法是返回一个JSON数据数组,对其进行解析并使用 Javascript 构建 HTML 客户端,以减少网络流量的负载,但您可以轻松地从旧方法开始。