loginAction!test1.action,通过action+ ! + 方法名来调用action中对应的方法,这样感觉很别扭,能不能实现通过传参来决定调用哪个方法,如:loginAction?method=test1,这样的方式使用。有的话请提供以下思路struts2action

解决方案 »

  1.   

    你那种是struts的动态方法调用方式。可以学习下struts的通配符方法。
      

  2.   

    回复于: 2013-01-30 21:45:44
    你那种是struts的动态方法调用方式。可以学习下struts的通配符方法。 用通配符显得太乱了,其实用参数的话和我上面写的方式是一样的,只不过一个是通过!+方法名传参,一个是通过method传参而已
      

  3.   

    jsp页面:
    <form name="form1" method="post" action="tongPeiadd.action">struts.xml配置<action name="tongPei*" class="com.yzsunlight.action.TongpeiAction" method="{1}">
       <result>/{1}Success.jsp</result>
    </action>
      

  4.   

    sp页面:
    <form name="form1" method="post" action="tongPeiadd.action">struts.xml配置
    C# code
    ?
    1
    2
    3

    <action name="tongPei*" class="com.yzsunlight.action.TongpeiAction" method="{1}">
       <result>/{1}Success.jsp</result>
    </action>
    对于通配的使用我是知道的,我只是觉得这样写不够直观,我希望只能能用参数来实现,直接传参method=?来实现,这样跟简单,而且直观
      

  5.   

    首先,看一个struts2的配置文件:Java代码 
    <package name="actions" extends="struts-default" namespace="/actions">    
            <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">    
                <result>/Student{1}_success.jsp</result>    
            </action>    
    </package>   
    <package name="actions" extends="struts-default" namespace="/actions"> <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}"> <result>/Student{1}_success.jsp</result> </action> </package>这里,"{1}"表示第1个*,例如,当请求以下路径时:引用
    http://localhost:9000/Struts2_0600_ActionWildcard/actions/Studentadd*为add,因此method="add",返回的页面为/Studentadd_success.jsp
    即实际调用的是StudentAction中的add方法。struts2的配置文件还可以更加简洁,即在action的class中使用通配符,如下:Java代码 
    <package name="actions" extends="struts-default" namespace="/actions">    
       <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">    
                <result>/{1}_{2}_success.jsp</result>           
            </action>          
        </package>   
    <package name="actions" extends="struts-default" namespace="/actions"> <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}"> <result>/{1}_{2}_success.jsp</result> </action> </package>使用两个通配符,{1}代表第一个*,{2}代表第二个*号。
    这个配置文件的意思是调用{1}Action的{2}方法,返回到{1}_{2}_success.jsp这个页面。例如,当请求一下路径时:引用http://localhost:9000/Struts2_0600_ActionWildcard/actions/Teacher_add
    其中{1}为Teacher,{2}为add,即实际调用的是TeacherAction类中的add方法,返回到Teacher_add_success.jsp页面。可以看到,使用第二种通配符,配置文件非常简洁,即使增加类和方法,也不需要修改配置文件,因此推荐通过第二种方式使用通配符。       Struts2配置中 Action 使用通配符1). Xml代码   1. <action name="user*" class="com.UserAction" method="{1}"> 
       2.        <result name="succee">/logon/welcome.jsp</result> 
       3.        <result name="input">/logon/logon.jsp</result> 
       4. </action> <action name="user*" class="com.UserAction" method="{1}">
           <result name="succee">/logon/welcome.jsp</result>
           <result name="input">/logon/logon.jsp</result>
    </action>比如当用户请求userLogon时,会被UserAction类处理,method{1}中{1}值为name属性中第一个*的值.2).Xml代码   1. <action name="*Action_*" class="com.{1}" method="{2}"> 
       2.         <result name="succee">/logon/welcome.jsp</result> 
       3.         <result name="input">/logon/logon.jsp</result> 
       4. </action> <action name="*Action_*" class="com.{1}" method="{2}">
            <result name="succee">/logon/welcome.jsp</result>
            <result name="input">/logon/logon.jsp</result>
    </action>当用户请求UserAction_logon时,会被UserAction类的logon方法处理
    与上面一样,class中{1}的值为name属性中第一个*的值,也就是UserAction,{2}的值为name属性中第二个*的值,即为logon
      

  6.   

    鄙人 看到通配符就蛋疼
    要是别人来维护你的代码 
    去天上找你的通配符啊 
    每次看到这种东西我就想骂娘
    最好的办法我觉得就是用!的方法
    第一,配置文件里只需要写一个默认的action
    第二,可以看到方法名,找起来也很方便
    不知道LZ为什么不喜欢呢
      

  7.   

    楼主我想知道用XXX.action!+方法名的方式,和XXX.action?method=方法名 ,根据你所希望的简单和直观上看,我觉得2着没区别,!+方法名不直观吗?不简单吗?不就是把method=换成了!而已,如果你非要用method这样的话,你可以去修改源代码进行拓展
      

  8.   

    struts1中有parameter属性来配置接受调用action方法的参数名,获得参数名对应的值通过反射来调用对应的Action中的方法,但是struts2没有这个功能