在<jsp:include/>中引用多个action遇到不能正常显示的问题,只能显示第一个action的内容,相关文件如下:
1,include.jsp的内容:
代码 1. <jsp:include page="test1.do"/>
2. <jsp:include page="test2.do"/>
2,struts-config.xml的部分内容:
代码 1. <action path="/test1" name="myForm" type="TestAction1" scope="request" validate="true" input="/error.jsp">
2. <forward name="test" path="/test1.jsp"/>
3. </action>
4. <action path="/test2" name="myForm" type="TestAction2" scope="request" validate="true" input="/error.jsp">
5. <forward name="test" path="/test2.jsp"/>
6. </action>
3,TestAction1的内容(TestAction2的内容类似)
代码 1. import javax.servlet.http.HttpServletRequest;
2. import javax.servlet.http.HttpServletResponse;
3. import org.apache.struts.action.Action;
4. import org.apache.struts.action.ActionForm;
5. import org.apache.struts.action.ActionForward;
6. import org.apache.struts.action.ActionMapping;
7.
8. public class TestAction1 extends Action
9. {
10. public ActionForward execute(
11. ActionMapping actionMapping,
12. ActionForm actionForm,
13. HttpServletRequest request,
14. HttpServletResponse response)
15. {
16. return actionMapping.findForward( "test" );
17. }
18. }
4,test1.jsp的内容(test2.jsp的内容相似)
代码 1. test1: <br />
2. <%=new java.util.Date()%>
当在浏览器中打开include.jsp时,只能显示test1.jsp的内容,即
=============================
test1:
Sat Aug 25 12:57:16 CST 2007
=============================
但我将include.jsp改为如下内容时,就能正常显示,
代码 1. XXXX
2. <jsp:include page="test1.do" flush="true"/>
3. <jsp:include page="test2.do"/>
“XXXX”可以是任意长度的任意字符,显示的结果为:
=============================
XXXX test1:
Sat Aug 25 12:59:01 CST 2007 test2:
Sat Aug 25 12:59:01 CST 2007
=============================
但是去掉“XXXX”或者“flush="true"”就都只能显示test1.jsp的内容。请问这是什么原因?我估计是struts跳转到jsp时出现的问题。
另外,若不通过struts,直接include jsp文件,比如,修改include.jsp的为以下内容,是两个jsp的内容都可以显示的。
代码 1. <jsp:include page="test1.jsp"/>
2. <jsp:include page="test2.jsp"/>
我的struts版本是1.2.7,jsp容器是tomcat5.0.28,jdk是1.5
1,include.jsp的内容:
代码 1. <jsp:include page="test1.do"/>
2. <jsp:include page="test2.do"/>
2,struts-config.xml的部分内容:
代码 1. <action path="/test1" name="myForm" type="TestAction1" scope="request" validate="true" input="/error.jsp">
2. <forward name="test" path="/test1.jsp"/>
3. </action>
4. <action path="/test2" name="myForm" type="TestAction2" scope="request" validate="true" input="/error.jsp">
5. <forward name="test" path="/test2.jsp"/>
6. </action>
3,TestAction1的内容(TestAction2的内容类似)
代码 1. import javax.servlet.http.HttpServletRequest;
2. import javax.servlet.http.HttpServletResponse;
3. import org.apache.struts.action.Action;
4. import org.apache.struts.action.ActionForm;
5. import org.apache.struts.action.ActionForward;
6. import org.apache.struts.action.ActionMapping;
7.
8. public class TestAction1 extends Action
9. {
10. public ActionForward execute(
11. ActionMapping actionMapping,
12. ActionForm actionForm,
13. HttpServletRequest request,
14. HttpServletResponse response)
15. {
16. return actionMapping.findForward( "test" );
17. }
18. }
4,test1.jsp的内容(test2.jsp的内容相似)
代码 1. test1: <br />
2. <%=new java.util.Date()%>
当在浏览器中打开include.jsp时,只能显示test1.jsp的内容,即
=============================
test1:
Sat Aug 25 12:57:16 CST 2007
=============================
但我将include.jsp改为如下内容时,就能正常显示,
代码 1. XXXX
2. <jsp:include page="test1.do" flush="true"/>
3. <jsp:include page="test2.do"/>
“XXXX”可以是任意长度的任意字符,显示的结果为:
=============================
XXXX test1:
Sat Aug 25 12:59:01 CST 2007 test2:
Sat Aug 25 12:59:01 CST 2007
=============================
但是去掉“XXXX”或者“flush="true"”就都只能显示test1.jsp的内容。请问这是什么原因?我估计是struts跳转到jsp时出现的问题。
另外,若不通过struts,直接include jsp文件,比如,修改include.jsp的为以下内容,是两个jsp的内容都可以显示的。
代码 1. <jsp:include page="test1.jsp"/>
2. <jsp:include page="test2.jsp"/>
我的struts版本是1.2.7,jsp容器是tomcat5.0.28,jdk是1.5
解决方案 »
- 一个网站自动化测试工具的设计与实现
- js
- 高分求解(100分)struts2返回json的list中有对象,但是前台取不到这个对象中的值
- ssh整合问题,老是提示连接已关闭!
- 关于spring事务超时配置问题,请高手指教!!
- 如何在JSP中进行设定,使文件可以被下载而不是在浏览器中打开
- Redhat9 Linux下的安装Tomcat问题
- 调查,各位作struts程序时,用什么工具画页面?(下班结贴)
- 哪位部署过j2ee的高手知道这是怎麽回事?javax.naming.NoInitialContextException:Need to...
- 关于 grails项目发布的问题在线等
- dispatchAciton中某函数调用另一个函数,哪个forward生效?
- OA系统和域整合
当flush属性为true,表示在执行插入操作之前,先调用当前页面的输出流的flush()方法。
flush="true"顶多只能影响前面的内容,跟后面的内容应该没有关系啊?
另外,就算加了flush="true",在<jsp:include page="test1.do" flush="true"/>之前也必须要有输出,
要不显示也只能显示前一个jsp的内容,这一点很奇怪。
就是不清楚struts在这里面到底是怎么处理的?
<jsp:include page="test2.do"/>
这样也不能全部输出吗?
3. <forward name="test" path="/test2.jsp"/>
2个test的值
To:qiuqingqiang 两个test的值有问题吗?能不能说得明白些
To:huoyin,我明天试一下,不过改变当前目录又怎样了呢?
1. <jsp:include page="test1.do"/>《
2. <System.out.println("xxx")>
3. <jsp:include page="test2.do"/> 那么,Tomcat执行了和jsp:include page="test1.do"/>对应的java代码后,后面的语句都不执行了,,
估计是,中间出错异常。想用,lomboz跟踪来着,环境塔了半天没有搭好
关键在struts处理跳转的时候,用的是org.apache.struts.tiles.TilesRequestProcessor类的以下代码:
protected void doForward(
String uri,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
if (response.isCommitted()) {
this.doInclude(uri, request, response);
} else {
super.doForward(uri, request, response);
}
}
所以,如果<jsp:include page="test1.do"/>前面没有输出,且这个标签没有flush="true"这一项的时候,response是没有commit的。所以struts全部把它当forward处理了。我觉得由此来判断是include还是forward有点挫诶。不过能解决问题,知道原因就行了。多谢回复!