Struts2 的动态调用
来源:互联网 发布:软件驻场项目 编辑:程序博客网 时间:2024/05/16 05:08
index.jsp 代码:
<form name="form" method="post"> <table border="1" cellpadding="0" cellspacing="0"> <tr> <td>用户名: </td> <td><input type="text" name="userName" id="userName" /></td> <td><input type="submit" value="检验" onclick="submitFrm('chexk');" /></td> </tr> <tr > <td>密码 </td> <td colspan="2"><input type="text" name="pwd" id="pwd" /></td> </tr> <tr> <td colspan="4"> <input type="submit" name="submit" id="submit" value="登录" /> <input type="submit" name="submitZ" id="submitZ" value="注册" onclick="submitFrm('reg');" /> <input type="reset" name="reset" id="reset" value="重置" /><input type="submit" name="Cess" id="Cess" value="测试" onclick="submitFrm('cess');"> </td> </tr> </table> </form> <form action="Cessac!cess.action" method="post"> <input type="submit" name="Cess" id="Cess" value="测试"> </form> <script type="text/javascript"> function submitFrm(menubar) { alert(menubar); //配置动态方法调用 格式: ActionName(action名)!chexk(方法名).action form.action="ActionName!"+menubar+".action"; form.submit; } </script>
分解:
第一种: 1---24 和 33--44属于 javascript的动态方法调用、格式如:action名!调用的方法名.action
第二种:27--31 一个普通的表单提交 格式也是一样!
区别:第一种可以在一个表单提交中调用多个方法. 第二种唯一的提交方法、允许一个submit.
效果:
struts.XML
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd"><struts> <constant name="struts.action.extension" value="action" /><package name="default" extends="struts-default"><action name="ActionName" class="com.struts2.action.UserManagerAction" ><result name="chexk">/check.jsp</result><result name="reg">/reg.jsp</result><result name="cess">/cess.jsp</result></action><action name="Cessac" class="com.struts2.action.UserManagerAction"><result name="cess">/cess.jsp</result></action></package></struts>
注意正常书写:
其中 <constant name="struts.action.extension" value="action" />
指定请求的后缀可以是.do或.action (这里用的是action)
UserManagerAction 方法类:
public class UserManagerAction extends BaseAction {//定义检测方法public String chexk() throws Exception{//获得输出对象PrintWriter out=this.getResponse().getWriter();out.println("检测方法!! chexk()");return "chexk";}//定义注册方法public String reg() throws Exception{//获取输出对象PrintWriter out=this.getResponse().getWriter();out.println(" 注册方法!! reg() ");return "reg";}//测试方法public String cess() throws Exception{//获取输出对象PrintWriter out=this.getResponse().getWriter();out.println(" 注册方法!! cess() ");return "cess";}}
继承的 BaseAction 属于action的基类:
参考一下:
public class BaseAction {//获取request对象public Map<String,Object> getRequest(){//通过ActionContext得到requerst对象return (Map<String, Object>) ActionContext.getContext().get("request");}//获得session对象public Map<String, Object> getSession(){return ActionContext.getContext().getSession();}//获得responseduixpublic HttpServletResponse getResponse(){//通过ServletActionContext获得HttpServletResponse对象HttpServletResponse response=ServletActionContext.getResponse();//设置编码响应头与字符串编码response.setContentType("text/html;charset=utf-8");response.setCharacterEncoding("utf-8");return response;}}
以上是对Struts2的方法调用、还有一个就是通配符的使用. 注意是在 struts.xml 中
注意:4个方法在同一个类中:
<action name="addUser" class="com.asm.UserAction" method="addUser"><result name="success">/user/addUser.jsp</result></action><action name="delUser" class="com.asm.UserAction" method="delUser"><result name="success">/user/delUser.jsp</result></action><action name="queryUser" class="com.asm.UserAction" method="queryUser"><result name="success">/user/queryUser.jsp</result></action><action name="updateUser" class="com.asm.UserAction" method="updateUser"> <result name="success">/user/updateUser.jsp</result></action>使用通配符只需如下内容即可达到相同的效果:<action name="*User" class="com.asm.UserAction" method="{1}User"> <result name="success">/user/{1}User.jsp</result></action>
原理:
这里不难明了*此时代指的内容是add,再来看method恰恰是引用第一个*的内容,所以它的method此时的完整名为addUser,
它刚好和com.asmUserAction中的addUser方法相对,所以它会去addUser方法,再来看下面的result配置所指代的页面,它也用到了{1},
所以它的完整页面是/addUser.jsp。其实如果我们有良好的编程命名习惯,所有的Action我们都只需要进行一次配置。
即配置文件可以写成如下形式:
<action name="*_*" class="com.asm.{2}Action" method="{1}"><result name="success">.../{1}_{2}.jsp</result></action>
实例下载:点击打开链接
- Struts2 的动态调用
- Struts2的动态方法调用
- Struts2动态方法的调用
- Struts2的动态方法调用
- Struts2的动态方法调用
- Struts2的动态方法调用
- struts2 动态方法调用,动态方法调用的理解
- struts2 动态方法调用,动态方法调用的理解
- Struts2的DynamicMethodInvocation 动态方法调用
- Struts2的动态方法调用DMI
- struts2 中action的动态方法调用
- Struts2中Action的动态调用方法
- Struts2动态方法调用的方式...
- Struts2学习笔记---动态方法的调用
- JavaEE struts2.5的动态方法调用
- Struts2动态调用方法的常见方式
- Struts2中Action的动态调用方法
- Struts2中Action的动态方法调用
- poj 2075-最小生成树-map映射
- 自学Node.js 三:优化路由逻辑
- 《程序员》ipad版 吐槽
- passdb backend = tdbsam
- 测试工具loadrunner简单介绍——脚本录制
- Struts2 的动态调用
- java 反射 基本知识——属性和方法
- MyBatis常见异常(1)
- 题目1339:ACM
- 黑马程序员_java基础二(语句,函数method和数组Array)
- wince下USB设备驱动程序导读
- Git as a database
- 在Windows CE增加自定义中断处理
- Wince下面添加应用程序,并且自动运行