日期:2014-05-19  浏览次数:20588 次

一个 S2SH 整合后出现的调用问题
ACTION里的连个方法
Java code


public String getAllUser() throws Exception{
        System.out.println("所有用户查询被执行。。。");
                //this.userlist = us.getAllUser();
        return SUCCESS; 
    }

    
public String getUserById() throws Exception{
        System.out.println("单个用户查询被执行。。。");
        /*System.out.println("id  : u.getID" +u.getId());
        u = us.getUserById(u.getId());*/ //屏蔽了暂时不调用
        return INPUT;
    }




struts.xml 配置
XML code

<action name="getAllUser" class="org.zhou.action.UserAction"
            method="getAllUser">
            <result name="success">/showUser.jsp</result>
            <result name="input">/error.jsp</result>
        </action>
        
        <!-- -->
        <action name="userById" class="org.zhou.action.UserAction"
            method="getUserById">
            <result name="success">/editUser.jsp</result>
            <result name="input">/error.jsp</result>
        </action>





中间没有其他业务逻辑
控制台:输出
SQL code

所有用户查询被执行。。。
所有用户查询被执行。。。
单个用户查询被执行。。。




问题一: 
当我调用 getAllUser.action 他对应的getAllUser()方法调用了两遍 
而且调用玩了 他还调用了 userById.action 对应的方法


实验:
ACTION里加
public void getA()throws Exception
{
System.out.println("A");
}

public String getB() throws Exception
{
System.out.println("B");
return null;
}

public String nogetC() throws Exception
{
System.out.println("C");
return null;
}

public String getD()
{
System.out.println("D");
return null;
}

public void getE(){
System.out.println("E");
}


输出:
B
D


结论:
Action 里 带有返回值的 getMthod() 方法都会被执行 

不明白 求大虾们解释 


------解决方案--------------------
这问题有些诡异,是不是其他配置文件影响的...
------解决方案--------------------
getUserById() 和 getAllUser() 
struts会认为是给属性注入值,估计是这样
------解决方案--------------------
探讨

getUserById() 和 getAllUser()
struts会认为是给属性注入值,估计是这样

------解决方案--------------------
struts2在进入action时会自动调用所有以get开头的方法,在跳出action时会自动调用所有以set为开头的方法。所以这边命令的时候,一般的方法不要以get,set开头,除非是你的变量(get、set方法)。
------解决方案--------------------
探讨

但是在 单独只使用STRUTS2 是 没有出现这样的问题额

------解决方案--------------------
探讨

难道和 事务的传播特性 有关系 ?

------解决方案--------------------
单独使用spring3 就足够了。没必要整合