- Action实现的三种方式及其不同方式的特点优势
-
第一:声明一个普通的java类即可。这种做法不具有侵入性。
-
第二:实现Action接口。实现接口中的execute()方法,这种方式使得我们编写的代码更加规范。
-
第三:继承ActionSupport类。这种做法使得在继承类的同时继承了类中的属性和方法,如:验证。 自己可以选择重写类中的execute()方法。
-
实现例子参考自己去看吧,我就不在造轮子了
-
http://www.2cto.com/kf/201410/346219.html
-
http://www.cnblogs.com/chentingk/p/5651559.html
-
http://blog.youkuaiyun.com/Ring_Len/article/details/52144665
Action调用的三种方式
第一种方式: 直接调用action中的方法(指定method属性 )
//struts.xml
<action name="stu" class="com.itmyhome.Student" method="add">
<result name="add">/success.jsp</result>
</action>
//jsp代码
<p align="center"><a href="stu.action">查询</a></p>
<form action="stu" method="post"></form>
说明:
- 这样Struts2就会调用stu.action指向Student类 中的add方法。
- Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法:
- 只要在action的对象中有一个add的方法,并且返回类型为String就可以了。如果没有method属性,则默认执行execute()方法。
第二种方式:动态方法调用(DMI)
- Struts2支持动态方法调用,它指的是一个Action中有多个方法,系统根据表单元素给定的action来访问不同的方法,而不用写多个Action。
-
使用动态方法调用前必须设置Struts2允许动态方法调用,它是通过设置struts.xml中加上常量
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
-jsp中动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以如下形式来指定Form的action属性
<a href="list!tolist.action"></a>
别人的例子
设置常量
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以如下形式来指定Form的action属性
action = "action!methodName.action"
在struts.xml中定义如下Action
<action name="student" class="com.itmyhome.StudentAction">
<result name="add">/add.jsp</result>
<result name="delete">/delete.jsp</result>
</action>
StudentAction代码为
public class StudentAction extends ActionSupport {
public String add(){
return "add";
}
public String delete(){
return "delete";
}
}
则在JSP中用如下方式调用方法
<a href="student!add.action"> 新增学生</a>
<a href="student!delete.action"> 删除学生</a>
两种方式action的对比
<struts>
<constant name="struts.i18n.encoding" value="utf-8"/>
<constant name="struts.ui.theme" value="simple"/>
<constant name="struts.DynamicMethodInvocation" value="true"></constant>
<!-- action动态调用常量设置 -->
<package name="default" namespace="/" extends="struts-default">
<action name="list" class="com.langlang.action.EmployeeAction">
<result name="tolist">/index.jsp</result>
<result name="add">/index.jsp</result>
<result name="detele">/index.jsp</result>
<result name="edit">/edit.jsp</result>
<result name="update">/index.jsp</result>
</action>
<!-- Struts2方法调用的三种方式,第一种方式:指定method属性
exp4_bookManage项目中用的是直接指定method方式
第二种方式:动态方法调用(DMI)
它指的是一个Action中有多个方法,系统根据表单元素给定的action
来访问不同的方法,而不用写多个Action。
jsp中调用这样的形式action = "action!methodName.action"
第三种方式,通配符(推荐使用)
-->
<!--
<action name="add" class="com.langlang.action.EmployeeAction" method="add">
<result name="yes">index.jsp</result>
</action>
<action name="delete" class="com.langlang.action.EmployeeAction">
<result name="yes">index.jsp</result>
</action>
<action name="detail" class="com.langlang.action.EmployeeAction" method="detail">
<result name="yes">detail.jsp</result>
</action>
<action name="update" class="com.langlang.action.EmployeeAction" method="update">
<result name="yes">index.jsp</result>
</action>
-->
</package>
<!-- Add packages here -->
</struts>
第三种方式:通配符(推荐使用)
<action name="student*" class="com.itmyhome.StudentAction" method="{1}">
<result name="{1}">/student{1}.jsp</result>
</action>
<a href="studentadd"> 新增学生</a>
<a href="studentdelete"> 删除学生</a>
- studentadd就会调用StudentAction中的add方法 然后跳转到studentadd.jsp
- studentdelete就会调用StudentAction中的delete方法 然后跳转到studentdelete.jsp
以上参考了各种代码,看起来有点乱,还是要自己消化和吸收的
这是我写的两个基于struts2 的项目
http://download.youkuaiyun.com/detail/qq_29232943/9661746