2.Action的使用
1.驱动方式:
1.属性驱动 :
.方式一:直接在action添加属性 ,注意要添加get和set方法 创建成员变量,变量名称和form表单中的name属性名称一致
.方式二:通过JavaBean的方式使用
1.将需要的值封装到一个类中
2.jsp页面form表单中的name属性值需要设置为 成员变量.属性名
action中声明JavaBean变量。同时添加Get和Set方法 ,表单中name属性中加变量名前缀
2.模型驱动:
* 模型驱动
* 1.实现ModelDriven接口
* 2.实现里面的getModel方法
* 3.jsp页面中的name属性值,改为和ModelDriven接口中的类属性名一致
* 4.成员变量必须实例化,getModel方法返回这个成员变量
1.action实现ModelDriven,指定泛型
2.声明JavaBean的成员变量并实例化
3.重写getModel(),返回JavaBean的实例
模型驱动为主,属性驱动为辅,两者配合使用
2.Action的3种实现方式:
1.简单的Java对象【POJO】
2.实现Action接口 5个常量
SUCCESS NONE ERROR INPUT LOGIN
execute()方法 当没有指定要调用的方法的时 候会执行的
3.继承ActionSupport类
实现了Action接口,支持验证框架,支持国际化
3:Action文件在配置文件中的配置方式:
1.静态方式
1.1.直接在Action节点中通过method属性制定调用的方法 代码多,不方便,但可读性高
<action name="userDelete" class="com.hd.controller.UserAction1" method="delete">
<result name="list" >/jsp/userlist.jsp</result>
</action>
2.通配符方式:通配符从1开始--{ } 推荐使用通配符的方式使用
<!--
通配符的方式配置:
高版本(2.3以后)只能访问1-2个方法,解决方式,在package节点中配置strict-method-invocation="false"
-->
<action name="user_*" class="com.hd.action.UserAction" method="{1}">
<!-- 允许通过通配符方式访问的方法 add,update,delete query 方法名 -->
<allowed-methods>add,update,delete,query</allowed-methods>
</action>
除了加<allowed>也可以在<action>中添加:
<package name="myPack" extends="struts-default" namespace="/user"
strict-method-invocation="false">
strict-method-invocation="false" 严格的方法访问
两个方法:
<action name="user_*_*" class="com.hd.controller.UserAction1" method="{1}">
<result name="list" >/jsp/{2}.jsp</result>
</action>
2.动态方式:
2.3以上版本要添加常量
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
strict-method-invocation="false" 同样要添加
<action name="user" class="com.hd.controller.UserAction1" >
<result name="list" >/jsp/userlist.jsp</result>
</action>
请求方式:http://.../user/user!save
不太推荐,和通配符有点类似,!的方式容易被黑客利用,看懂别人的代码