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>


实例下载:点击打开链接


原创粉丝点击