原来用struts1.1使用如下注释掉的代码一切正常,
|
换为struts1.2.9后就出现:Forward on committed response错误(Tomcat5.0控制台debug);在网站上运行resin2.1.12在页面上报错:
500 Servlet Exception
java.lang.IllegalStateException: forward() not allowed after buffer has
committed.
at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:131)
at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:103)
at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:80)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:165)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
at com.learndiary.website.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:102)
at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
at com.caucho.server.http.Invocation.service(Invocation.java:315)
at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:346)
at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
at java.lang.Thread.run(Thread.java:595)
--------------------------------------------------------------------------------
Resin 2.1.12 (built Tue Dec 9 14:58:25 PST 2003)
经过查资料,发现是PrintWriter已经返回用户数据后,就不能再forward到其它页面了。也就是这个错误:
|
所以就不在Action中写提示信息了,而把其移动jsp页面,如下:
|
同时,我发现如果在Action中用的是request.setAttribute("isMessage", "true");
则在页面中可以 <c:if test="${requestScope['isMessage'] == true }">
注意,上面的“true”是没有加引号的,可能这就是c:if的boolean类型吧,我也没有去查资料;
但是,如果为:request.setAttribute("isMessage", "otherString");
则必须这样: <c:if test="${requestScope['isMessage'] == \"otherString\"); }">
就是要加双引号,而且要进行转意。