这时,我们想执行登陆方法(login())我们只要将URL地址写成userAction!login,这样框架将调用userAction的login()方法;如果要调用reg()方法,就要写成userAction!reg。
第二种:方法名在前Action名在后使用通配符实现,格式为methodNameActionName 继续使用以上代码来说明,我们要做用户登录,URL只需要写成loginuserAction这种形式,也会和上面一样框架将调用userAction的login()方法。 注:第二种方式需要指定method属性。
method属性:
在一个Action当中,如果不使用动态方法调用,则访问Action时,将默认执行Action中的execute()方法;如果我们想让他默认执行别的方法,则就要使用method属性。
<action name="UserAction" class="action.UserAction" method="login"> <result name="login_success">guanli.jsp</result> <result name="login_error">login.jsp</result> </action> 上面代码我们指定了method属性为 login,当我们请求UserAction时候,会UserAction类中的login方法。 注:Struts2在根据action元素的method属性查找执行方法时有两种途径 1.查找与method属性完全一致的方法。 2.查找doMethod()形式的方法。 也就是说,会先到UserAction类中找login()方法,如果找不到则会查找doLogin()方法。Action中通配符的使用
在配置<action..../>元素时,需要指定name、class和method属性,其中name属性支持通配符然后可以在class、method属性中使用表达式。通配符用型号标识,用于配置0个或多个字符串。配置如下
<action name="*UserAction" class="action.UserAction" method="{1}"> <result name="login_success">guanli.jsp</result> <result name="login_error">login.jsp</result> </action>当我们的请求地址的URL为loginUserAction时,会执行UserAction类中的方法,因为星号代表了0或多个字符串,而 UserAction正好完全匹配。如果你写成loginUser,则是无法匹配此配置的Action。还指定了method属性,该属性使用了一个表达式{1},该表达式的值就是name属性值中第一个“*”的值。 配置默认的Action 如果请求一个不存在的Action,那么结果将会在页面上呈现HTTP 404错误,为了解决这个问题,框架允许定义一个默认的Action,即如果没有一个Action匹配请求,那么默认的Action将被执行。配置如下 <package name="default" extends="struts-default"> <default-action-ref name="defaultAction"></default-action-ref> <action name="defaultAction"> <result>error.jsp</result> </action> </package>注: 在使用动态查询的时候需要设置一个属性为true,才能使用动态查询。默认为false关闭的
<span style="font-size:14px;"><constant name="struts.enable.DynamicMethodInvocation" value="true"/></span>