如果我离开
action
属性,这样它就可以回发到同一个JSP,读取请求参数没有问题。但是当我添加一个
属性使用单独的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>
上一页按预期工作。最初打印页面
You clicked null
You clicked First
等等。
现在我只在上面的页面中更改一行来添加
属性:
<FORM NAME="form1" METHOD="POST" ACTION="FormHandler.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
无效的
.
什么可能会干扰发送到单独JSP的请求参数?
更新:
行动
属性为
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>
.faces
行动
属性绕过此筛选器。