`
诗意的栖居
  • 浏览: 269636 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

struts2动态方法调用

阅读更多
struts2的动态方法调用有三种方式


1、第一种方式:设置method属性


在Action类中定义一个签名与execute方法相同、只是名字不同的方法,如定义为:

public String login() throws Exception{}

然后在struts.xml文件中加一个<action>元素,并设置它的method属性。代码如下(核心代码):


<action name="loginMethod"

       class="com.polaris.LoginAction" method="login">

<result>/result.jsp</result>

<result name="error">/error.jsp</result>

</action>

清单1:struts.xml部分内容


然后在JSP中表单的action设置为loginMethod。这样,Struts2就会去调用LoginAction中的loigin方法,而不会去调用execute()方法。


2、第二种方式:改变表单的action的设置内容


同第一种方式,定一个login方法。只是不需要改变struts.xml文件的内容。然后,在JSP页面中,设置表单的action为loginMethod!login.action。这样,Struts2也会去调用login方法,而不调用execute方法。其中,表单action="loginMethod!login.action" 中,loginMethod为struts.xml文件中<action> 元素的name属性值,login.action中的login为Action类中的方法名。注意:login.action的action不能少。


3、第三种方式:使用通配符


首先同上面两种方式,定一个login方法,然后在struts.xml文件中配置如下内容:


<action name="*Action"

   class="com.xuxinhua1984.struts2.i18n.LoginAction" method="{1}">

<result name="success">/success.jsp</result>

<result name="error">/error.jsp</result>

</action>

清单2:struts.xml部分内容


然后在JSP页面中,设置表单的action为loginAction,此处login为Action类中的方法名,这样struts.xml中的*Action就可以和loginAction模糊匹配了,然后,method="{1}"就相当于method="login"。这样一来就回到了第一种方式。

另外,这种方式甚至结果类型对应的物理视图都可以用通配符。例如,如果想让登录失败后返回登录页,可以设置<result name="error">/{1}.jsp</result>。这样,此处的{1}也会被*号实际的内容替代,此处为login,所以就转发回login.jsp页面了。


对于以上三种方式,尽量使用第一、第二种方式,感觉第三种方式是比较灵活,但是也容易产生混乱,且容易出错。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics