先上配置文件
<struts> <package name="struts2_4" extends="struts-default" >
<action name="login" class="com.dcj.action.LoginAction">
   
<result name="studentsuccess" type="chain">
<param name="namespace">/</param>
<param name="actionName">question</param>
   <param name="method">getRandomQuestion</param>
</result>
   
<result name="teachersuccess" type="redirect">/teacher/index.html</result>
<result name="input">/login.jsp</result>
</action>

<action name="question" class="com.dcj.action.QuestionAction" method="add">
<result name="success" type="redirect">/teacher/right.html</result>
<result name="input">/teacher/addQuestion.jsp</result>
</action>

<action name="question" class="com.dcj.action.QuestionAction" method="list">
<result name="success">/teacher/questionManage.jsp</result>
</action>

<action name="question" class="com.dcj.action.QuestionAction" method="listByPage">
<result name="success">/teacher/questionManage.jsp</result>
</action>

<action name="question" class="com.dcj.action.QuestionAction" method="query">
<result name="success">/teacher/questionQueryResult.jsp</result>
</action>
  
  
<action name="question" class="com.dcj.action.QuestionAction" method="delete">
<result name="success" type="chain">
<param name="namespace">/</param>
<param name="actionName">question</param>
   <param name="method">listByPage</param>
</result>
</action>
 
<!--    
<action name="question" class="com.dcj.action.QuestionAction" method="getRandomQuestion">
<result name="success">/student/index.jsp</result>
</action>
-->
</package>
</struts>我把最后一个action注释了,但是调用http://localhost:8081/OnlineTest/teacher/question!listByPage.action?currentPage=3 出现错误。Infinite recursion detected: [//question!listByPage, //question!listByPage, //question!listByPage] - [unknown location]出现死循环。如果去掉注释,则可以运行,但是跳转的页面为/student/index.jsp。但是我根本就没有调用到这个方法啊。。
各位大侠帮我看看配置文件哪里错了  会不会是命名空间的问题啊。。

解决方案 »

  1.   

    你的问题应该不在你的配置文件中,还有,你这个配置文件敢写的再乱点不,你的QuestionAction弄那么多干什么,一个就可以了,method可以用通配符来配,或者就像你自己写的用!的形式,不需要些这么多重复的东西的
      

  2.   

    楼上的方法我试过了 没用 。。 tomcat中一访问就会出现index的文件。。 我的这个action都是通过method调用 的 会不会是因为这个原因造成混乱的。 有一个更奇怪的现象 注释掉最后三个action完全达到预期目的,但是注视掉倒数第三个和倒数第一个 还是出现死循环。。
      

  3.   

    建议不要用method与! 这种方式,每个action 对应一个类 ,还有这个配置好像可以有多个,用include组织起来.这样结构会清楚,出错了容易查到.
      

  4.   

    如果注视掉倒数两个 又跳转到/teacher/questionQueryResult.jsp  难道我的method方法根本没起作用? 动态方法的调用的写法应该没写错吧  同志们,救救我啊!
      

  5.   

    再问一下 使用struts控制时,地址栏上是不会显示jsp页面地址的,大家是怎么得知这是个什么页面的啊。
      

  6.   

    这应该是代码的问题 不是缓冲什么的问题 
    我把出错的配置文件那里改了一下。。<action name="question" class="com.dcj.action.QuestionAction" method="listByPage">
    <result name="success_list">/teacher/questionManage.jsp</result>
    </action>
    相应的改了action类public String listByPage() throws Exception {
    System.out.println("aaaaaa");
    int totalCount = questionservice.getQuestionCount();
    page = PageUtil.createPage(10, totalCount, currentPage);
    list = questionservice.listByPage(page);
    return "success_list";
    }结果报错是HTTP Status 404 - No result defined for action com.dcj.action.QuestionAction and result success_list这就诡异了啊。。
      

  7.   

    namespace指定的是绝对路径,不指定就是整个项目目录都有效。
    楼主请把QuestionAction代码贴出来
      

  8.   

    <action name="question_*" class="xxxx.xxxx" method="{1}"></action>
    一般人我不告诉他
      

  9.   

    LZ 你的 <action name="question" 怎么都是相同的呀?修改如下试试 <struts>    <package name="struts2_4" extends="struts-default" >
            <action name="login" class="com.dcj.action.LoginAction">
              
                <result name="studentsuccess" type="chain">
                    <param name="namespace">/</param>
                    <param name="actionName">question</param>
                      <param name="method">getRandomQuestion</param>
                </result>
              
                <result name="teachersuccess" type="redirect">/teacher/index.html</result>
                <result name="input">/login.jsp</result>
            </action>
            
            <action name="question!add" class="com.dcj.action.QuestionAction" method="add">
                <result name="success" type="redirect">/teacher/right.html</result>
                <result name="input">/teacher/addQuestion.jsp</result>
            </action>
            
            <action name="question!list" class="com.dcj.action.QuestionAction" method="list">
                <result name="success">/teacher/questionManage.jsp</result>
            </action>
            
            <action name="question!listByPage" class="com.dcj.action.QuestionAction" method="listByPage">
                <result name="success">/teacher/questionManage.jsp</result>
            </action>
            
            <action name="question!query" class="com.dcj.action.QuestionAction" method="query">
                <result name="success">/teacher/questionQueryResult.jsp</result>
            </action>
          
          
            <action name="question!delete" class="com.dcj.action.QuestionAction" method="delete">
                <result name="success" type="chain">
                    <param name="namespace">/</param>
                    <param name="actionName">question</param>
                      <param name="method">listByPage</param>
                </result>
            </action>
             
    <!--       
            <action name="question!getRandomQuestion" class="com.dcj.action.QuestionAction" method="getRandomQuestion">
                <result name="success">/student/index.jsp</result>
            </action>
    -->    
        </package>
        </struts>
      

  10.   

    同意24楼的说法,action的名字怎么是相同的啊,先试着改成不同的名字,如果可以的话就用struts2的通配符,<action name="question_*" class="com.dcj.action.QuestionAction" method="{1}">,这样请求的路径变成了question_add!add.action,具体可以google一下查询struts2的通配符。
      

  11.   

    action 的name是不应该重复的, 
      

  12.   

    1:根据你请求的url   取得对应的 action   method2:根据action的name 查找对应的 配置文件中的action (name 重复应该是只能找到一个,估计是最后一个)
    3:若你请求的url中的method为空,则走你配置文件中定义的method ,不为空的时候就走你请求的方法
      

  13.   

    楼上正解,action名字冲突,不能写成一样的,可以用通配符
      

  14.   

    namespace指定的是绝对路径,不指定就是整个项目目录都有效。
    楼主请把QuestionAction代码贴出来
      

  15.   

    楼主把你的配置文件改改吧!  
     <action name="question" class="com.dcj.action.QuestionAction" method="add">
    后面别跟method了....只写action name和class就OK,访问的时候用action!method就可以!
      

  16.   

    一种方法:<action name="listByPage" class="com.dcj.action.QuestionAction"      method="listByPage">
                <result name="success">/teacher/questionManage.jsp</result>
            </action> 
    访问listByPage.action;另一种::<action name="question" class="com.dcj.action.QuestionAction" >
                <result name="success">/teacher/questionManage.jsp</result>
            </action> 
    访问question!listByPage ;result的名字可以改改
      

  17.   

    真的你的action name都一样干嘛这样子struts该怎么去找,debug时看看struts源码 分析下错误原因吧
      

  18.   

    把<result name="success">/student/index.jsp</result>
    中的/student/index.jsp改为你要到的页面