java – 当我将表单发布到另一个页面时,JSP表单参数消失
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 当我将表单发布到另一个页面时,JSP表单参数消失,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2442字,纯文字阅读大概需要4分钟。
内容图文
如果我将action属性从我的表单中删除,那么它会回发到同一个JSP,我可以毫不费力地读取请求参数.但是,当我添加一个action属性来处理带有单独JSP的表单时,请求参数为null.这是一个简短的例子(FormTest.jsp),它说明了我如何阅读请求.
<HTML>
<HEAD>
<TITLE>FormTest.jsp</TITLE>
</HEAD>
<BODY>
<H3>Using a Single Form</H3>
<%
String command = request.getParameter("submit");
%>
You clicked <%= command %>
<FORM NAME="form1" METHOD="POST">
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="First">
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="Second">
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="Third">
</FORM>
</BODY>
</HTML>
上面的页面按预期工作.最初页面打印您单击null与表单一起.单击三个按钮中的任何一个按钮都会将消息更改为您单击“首先”等.
现在我只更改上面页面中的一行来添加action属性:
<FORM NAME="form1" METHOD="POST" ACTION="FormHandler.jsp">
我在项目中添加了一个单独的JSP来读取请求参数,如下所示:
<HTML>
<HEAD>
<TITLE>FormHandler.jsp</TITLE>
</HEAD>
<BODY>
<H3>Form Handler</H3>
<%
String command = request.getParameter("submit");
%>
You clicked <%= command %>
</BODY>
</HTML>
我希望新的FormHandler.jsp只打印出在另一页上按下的按钮,但似乎请求参数始终为null.
什么可能干扰请求参数被发送到单独的JSP?
更新:
该项目还有一个JSF配置文件.我将action属性更改为ACTION =“FormHandler.faces”,上面的代码可以工作,但我还不太明白为什么.这是重定向以.jsp结尾的请求的方法.
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String uri = request.getRequestURI();
if (uri.endsWith(".jsp")) {
int length = uri.length();
String newAddress = uri.substring(0, length - 3) + ".faces";
response.sendRedirect(newAddress);
}
else { //Address ended in "/"
response.sendRedirect("login.faces");
}
}
现在我想我需要知道1)如何判断这是否是问题的根源,2)有没有办法在重定向响应时保留请求参数?
此项目的web.xml配置文件中还有一个条目,用于设置过滤器映射.
<filter-mapping>
<filter-name>faces-redirect-filter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
我想(但现在可能很清楚,我是JSF的新手,所以如果我错了就有人纠正我),在我的action属性中使用.faces扩展名会绕过这个过滤器.
解决方法:
POST参数丢失,因为sendRedirect()发送302 Moved Temporarily重定向,指示浏览器使用GET请求加载指定的页面.
要保留参数,您需要使用307临时重定向 – 它指示浏览器重复对指定URI的POST请求:
response.setHeader("Location", newAddress);
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
内容总结
以上是互联网集市为您收集整理的java – 当我将表单发布到另一个页面时,JSP表单参数消失全部内容,希望文章能够帮你解决java – 当我将表单发布到另一个页面时,JSP表单参数消失所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。