Struts2 的动态调用

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="检验" οnclick="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="注册" οnclick="submitFrm('reg');" /> 
 					<input type="reset"  name="reset" id="reset" value="重置" />
					<input type="submit" name="Cess" id="Cess" value="测试" οnclick="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();
	}
	
	//获得responseduix
	public 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>


实例下载:点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值