Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我将表单发布到另一个页面时,JSP表单参数消失_Java_Jsp_Jsf_Forms_Post - Fatal编程技术网

Java 当我将表单发布到另一个页面时,JSP表单参数消失

Java 当我将表单发布到另一个页面时,JSP表单参数消失,java,jsp,jsf,forms,post,Java,Jsp,Jsf,Forms,Post,如果我将action属性保留在表单之外,这样它就会发回同一个JSP,那么读取请求参数就不会有问题。但是,当我添加action属性以使用单独的JSP处理表单时,请求参数是null。下面是一个简短的示例(FormTest.jsp),说明了我是如何读取请求的 <HTML> <HEAD> <TITLE>FormTest.jsp</TITLE> </HEAD> <BODY> &l

如果我将
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>
我在我的项目中添加了一个单独的JSP来读取请求参数,如下所示:

<HTML>
    <HEAD>
        <TITLE>FormHandler.jsp</TITLE>
    </HEAD>
    <BODY>
        <H3>Form Handler</H3>
        <%
            String command = request.getParameter("submit");
        %>
            You clicked <%= command %>
    </BODY>
</HTML>
现在我想我需要知道1)如何确定这是否是问题的根源,2)在重定向响应时是否有办法保留请求参数

该项目的
web.xml
配置文件中还有一个条目用于设置过滤器映射

<filter-mapping>
    <filter-name>faces-redirect-filter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

面重定向过滤器
*.jsp

我想(但现在可能已经很清楚,我是JSF新手,所以如果我错了,有人会纠正我)在我的
操作
属性中使用
.faces
扩展可以绕过这个过滤器。

POST
参数丢失,因为
sendRedirect()
发送一个临时移动的
302
重定向,它指示浏览器加载带有
GET
请求的指定页面

要保留参数,您需要改用
307临时重定向
——它指示浏览器对指定的URI重复
POST
请求:

response.setHeader("Location", newAddress); 
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT); 

你的环境是什么?我刚刚将您的示例粘贴到Tomcat 6.0.24中,效果很好。@Aff:我正在WebLogic 9.2中运行这个。这个项目还有一个JSF配置文件,我正在查看它,看看是否能找到问题的根源。你在firebug的网络视图中看到这个请求了吗?@kukudas:谢谢。不幸的是,我正在使用IE6工作,所以没有firebug。这正是我需要的。谢谢。非常感谢@axtavt!这就是我要找的
<filter-mapping>
    <filter-name>faces-redirect-filter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
response.setHeader("Location", newAddress); 
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);