动态方法调用有两种:1、通过在动作名后面加上!+相应要调用的动作名。2、通过通配符对相应的方法进行调用。
第一种方法:官方不建议使用,并且这种调用可以关闭,在default.properties文件中找到struts.enable.DynamicMethodInvocation 属性,然后在struts.xml文件中,利用更改常量的方法关闭。
第二种方法:在没使用通配符对方法进行调用的时候,struts.xml文件的代码是这样的:
<action name="customer_add" class="cn.ansel.domain.Customer" method="add">
<result name="success">/add.jsp</result>
</action>
<action name="customer_delete" class="cn.ansel.domain.Customer" method="delete">
<result name="success">/delete.jsp</result>
</action>
<action name="customer_update" class="cn.ansel.domain.Customer" method="update">
<result name="success">/update.jsp</result>
</action>
<action name="customer_query" class="cn.ansel.domain.Customer" method="query">
<result name="success">/query.jsp</result>
</action>
在地址栏中输入:http://localhost:8080/struts2Day02/ns2/customer_query的时候,显示
当使用通配符进行方法调用的时候,struts.xml文件是这样写的,
<package name="p2" extends="struts-default" namespace="/ns2">
<action name="customer_*" class="cn.ansel.domain.Customer" method="{1}">
<result name="success">/{1}.jsp</result>
</action>
这里主要利用的时命名规则,在前面利用ajax+jquery进行应用的时候,
当选择一个子元素时,父元素就被选中。当所有子元素都没有被选中时,父元素也不被选中,这里利用的就是命名的规则,把customer_customer作为父元素的名字,子元素的名字为customer_visit,customer_list,customer_records,customer_set(图中第一栏).
要获取到父元素,这里有子元素的名字,只要把子元素的名字用JavaScript的正则表达式的split方法,以”_“把名字分开,即可获取到父元素对象。这里也是一样的道理。可见命名对于编程的重要性。
这里的{1}就是对应地址栏中输入的动作名称。可见,这样使配置文件明了了许多