1 Action:在com.opensymphony.xwork2.Action的接口申明中,Action提供execute()方法,子类必须实现execute()方法。
1) 简单的Action配置,如:
<action name="login" class="com.namespace.NameSpaceAction"> <result name="SUCCESS">/jsp/test1.jsp</result> </action>
前台发送调用login的请求,监听器调用默认的execute()方法。2) 一个方法一个Action配置:开发中通常将多个方法写在一个Action中,这样Action便可以采用集中配置的方式。如下面的代码,就是用一个方法配置一个Action:
<action name="delete" class="com.example.CurdAction" method="delete">
3) 通配符方式:如struts中配有如下几个action,ManagerUserAction中有与之对应的方法:
如果使用通配符,可以省略写成一个action:<action name="addUser" class="com.netshuai.action.ManagerUserAction" method="add"> <result name="success">/addUser.jsp</result> </action> <action name="delUser" class="com.netshuai.action.ManagerUserAction" method="del"> <result name="success">/delUser.jsp</result> </action> <action name="updateUser" class="com.netshuai.action.ManagerUserAction" method="update"> <result name="success">/updateUser.jsp</result> </action>
其中,*为通配符,{1}为*所替换的内容,如用户访问的是addUser.action,则*就被自动替换为add,{1}处也自动使用add替换。<action name="*User" class="com.netshuai.action.ManagerUserAction" method="{1}"> <result name="success">/{1}User.jsp</result> </action>
4) 分隔符加上*:分隔符可以是"_","!"等。调用方式:crud_add.action、crud_delete.action<action name="crud_*" class="example.Crud" method="{1}">
调用方式:crud!add.action、crud!delete.action<action name="crud!*" class="example.Crud" method="{1}">
5) URL映射规则:如下面的代码中,"User/add.action"将调用User的add方法
<action name="*/*" method="{2}" class="com.example.{1}Action"> <result type="redirect">/{1}/view.action</result> <result type="view">/{1}/view.jsp</result> </action>
2.Result:当Action处理完信息后,需要根据Result结果配置,将Action的处理结果对应到相应的结果视图。
1)实例:
<action name="addBook" class="action,AddBook"> <result>/allBooks.jsp</result> </action>
2)Result配置分类:
a) <result>定义在<action>中,作用范围是这个Action;
b) <result>定义在<package>的<global-results>元素中,作用范围是整个包,如:
<global-results> <result name="exception" type="redirect">/exception.jsp</result> </global-results>
按名称属性分:
名字 说明 Chain Result 用来处理Action链 Dispatcher Result(默认) 用来转向页面,通常处理JSP FreeMarker Result 处理FreeMarker模板 HttpHeader Result 用来控制特殊的Http行为 Redirect Result 重定向到一个URL Redirect Action Result 重定向到一个Action Stream Result 向浏览器发送InputSream对象,通常用来处理文件下载 Velocity Result 处理Velocity模板 XLS Result 处理XML/XLST模板 PlainText Result 显示原始文件内容,例如文件源代码 S2PLUGINS:Tiles Result 结合Tile使用
3.动态Result:下一个状态依赖于输入元素。
实例:通过EL表达式动态访问Action:
private String nextAction; public String getNextAction() { return nextAction; }
在strutx.xml配置文件中,我们可以使用${nextAction}来引用到Action中的属性,通过${nextAction}表示的内容来动态的返回结果,例如:<action name="fragment" class="FragmentAction"> <result name="next" type="redirect-action">${nextAction}</result> </action>
上述Action的execute方法返回next的时候,还需要根据nextAction的属性来判断具体定位到哪个Action。
4.exception:Struts2的异常处理机制。通过在struts.xml文件中配置<exception-mapping>元素完成。
配置<exception-mapping>时需要指定两个属性
异常映射分两类:a)exception:指定该异常映射所设置的异常类型;
b)result:系统转入Result属性所指向的结果;
a) 局部异常映射:<exception-mapping>作为<action>的子元素;
b) 局部异常映射:<exception-mapping>作为<global-exception-mapping>元素的子元素;