java – 当我将表单发布到另一个页面时,JSP表单参数消失
如果我将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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |