struts2开发3--动态得到要访问Action方法的3种方法

在实际应用中,每个action都要处理多个业务,所以每个Action都会包含多个处理业务逻辑的方法,针对不同的客户端请求,Action会调用不同的方法进行处理,就要使用动态方法调用。

方法一:

在使用动态方法调用时,jsp里面Form表单的action属性必须符合如下格式:

<s:form action="Action名字!方法名称">或者<s:form action="Action名字!方法名称.action">

在struts.xml文件中配置如下:

<action name="Action名称" class="包名.Action类名">

<result>视图UR</result>

</action>

这个方法就能让jsp动态访问Action中的不同方法。

方法二:

使用method属性

Action元素除了name,class属性以外,还有一个method属性,该属性用于指定要执行的Action方法,在struts.xml文件中的配置如下:

<action name="Action名字" class="包名.Action类名" method="Action类名中的方法的名称">

<result>视图UR</result>

</action>

因为为每一个action都指定了要处理的方法名称,所以在jsp中form表单action的名称可以直接写struts.xml文件配置的action的名称,格式如下:

<s:form action="action名字.action">或者<s:form action="Action名字">

这种方法对业务逻辑层的每一个方法都要在struts.xml文件设置其对应的action,这种方法虽然简单容易理解,但是为业务逻辑层每一个方法配置都一个action,会使得struts.xml文件过于庞大,如果业务逻辑层要处理的方法特别多时,不推荐使用该方法。

方法三:

使用通配符

为了解决struts.xml过于庞大的问题,struts2推出一种通配符解决这个问题。下面我以一段代码来说明:

 <action name="user_*" class="com.test.action.userAction" method="{1}">
        <result>/user_{1}.jsp</result>
   </action>

几点说明如下:

(1)user_*:user_之后可以匹配任意字符,比如user_add。

(2)method="{1}":表示method属性值匹配的第一个“*”的内容,比如name="user_add",则method=“add”。

(3)user_{1}.jsp:这里的{1}与method属性值中的{1}表示的含义相同,都表示匹配第一“*”的内容,比如name="user_add",则返回的视图为user_add.jsp。

注意:这里的name属性值只有一个“*”,其实还可以有两个,三个或者多个,比如含有两个的name="*_*" ,此时们可以使用{1},{2}来表示每个“*”的内容。

使用通配符时的检索规则,在struts.xml中如果能找到name属性值与请求的Action名完全一致时,则匹配该action元素,而不会匹配使用通配符的配置。如果没有找到,才会匹配通配符。且按照配置文件的配置顺序依次匹配,最先符合的action元素将会被匹配。

另外,这里讲下默认的action配置元素default-action-ref,其作用是当用户找不到对应的action元素值时,系统将调用默认的Action来接受用户请求信息。其配置规则如下:

<default-action-ref name="user"/>

 <action name="user" class="com.test.action.userAction" method="userAdd">
        <result>/success.jsp</result>
  </action>

在上述代码中使用了default-action-ref元素配置了一个默认的Action,该元素只包含一个name属性,属性名字为user,表面默认的Action为user所对应的Action类。在该文件中必须使用action元素对应名称为user的Action进行配置,例如上面的代码action name="user"配置,否则,默认的Action是不起作用的。

猜你喜欢

转载自673390302.iteye.com/blog/2290808