动态方法调用:
(action代码)
package com.zking.web;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.zking.entity.Cal;
public class CalAction implements ModelDriven<Cal>{
private Cal cal = new Cal();
private Object res;
public Object getRes() {
return res;
}
public void setRes(Object res) {
this.res = res;
}
public String add() {
ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())+Integer.valueOf(cal.getNum2()));
// res = Integer.valueOf(cal.getNum1())+Integer.valueOf(cal.getNum2());
return "ok";
}
public String min() {
ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())-Integer.valueOf(cal.getNum2()));
// res = Integer.valueOf(cal.getNum1())-Integer.valueOf(cal.getNum2());
return "ok";
}
public String mul() {
ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())*Integer.valueOf(cal.getNum2()));
// res = Integer.valueOf(cal.getNum1())*Integer.valueOf(cal.getNum2());
return "ok";
}
public String div() {
ServletActionContext.getRequest().setAttribute("rs", Integer.valueOf(cal.getNum1())/Integer.valueOf(cal.getNum2()));
// res = Integer.valueOf(cal.getNum1())/Integer.valueOf(cal.getNum2());
return "ok";
}
@Override
public Cal getModel() {
// TODO Auto-generated method stub
return cal;
}
}
(jsp代码)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function doSubmit(num) {
if(num == 1)
claForm.action = "${pageContext.request.contextPath}/sy/calAction_add.action";
else if(num == 2)
claForm.action = "${pageContext.request.contextPath}/sy/calAction_min.action";
else if(num == 3)
claForm.action = "${pageContext.request.contextPath}/sy/calAction_mul.action";
else if(num == 4)
claForm.action = "${pageContext.request.contextPath}/sy/calAction_div.action";
claForm.submit();
}
</script>
</head>
<body>
<h1>struts的入门</h1>
<a href="${pageContext.request.contextPath}/sy/helloAction.action">点击测试1</a>
<h1>动态方法的调用</h1>
<form action="" id="claForm">
Num1:<input type="text" name="num1">
Num2:<input type="text" name="num2">
<button value="+" onclick="doSubmit(1)">+</button>
<button value="-" onclick="doSubmit(2)">-</button>
<button value="*" onclick="doSubmit(3)">*</button>
<button value="/" onclick="doSubmit(4)">/</button>
</form>
</body>
</html>
j2ee的交互传参:
(action代码)
package com.zking.web;
import com.opensymphony.xwork2.ModelDriven;
import com.zking.entity.User;
/**
* struts中的传值方式:
* 1.游览器->后台
* 1.modeldriven接口传值
* 2.set,get 方法传值
* 3.对象导航传值
*
* 但会引发一个问题:参数赋值的问题
* user1.uname 时优先赋值的
* uname 没有值
* 原因:就好比,一个人去面试,有三个公司的面试点,在面试第一个公司的时候成功面试上,那么就不会在去面试了
*
* 2.后台 -> 游览器jsp
* 1.传统作用域向jsp传值
* 与j2ee容器交互
* 2.3.1 非注入
2.3.1.2 耦合
ServletActionContext
2.3.1.2 解耦(建立使用解耦模式)
ActionContext
2.3.2 注入
2.3.2.1 耦合
2.3.2.2 解耦
* 2.值栈传值
*
* @author 我是你爸爸
*
*/
public class ParamAction implements ModelDriven<User>{
// ModelDriven接口传值
private User user1 = new User();
//set get方法传值
//private String name;
private String uname;
//对象导航传值
private User user2 = new User();
@Override
public User getModel() {
// TODO Auto-generated method stub
return user1;
}
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
public User getUser2() {
return user2;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public void setUser2(User user2) {
this.user2 = user2;
}
public String execute() {
System.out.println("modelDriven接口传值:"+this.user1);
System.out.println("set get方法传值:"+this.uname);
System.out.println("对象导航传值:"+this.user2);
return null;
}
}
(控制显示,参数赋值的问题)
2.3 与J2EE容器交互
2.3.1 非注入
2.3.1.2 耦合
ServletActionContext
2.3.1.2 解耦(建立使用解耦模式)
ActionContext
2.3.2 注入
2.3.2.1 耦合
作业:找出struts2中其它的几个注入接口(XxxAware)
2.3.2.2 解耦
(相关代码展示)
package com.zking.web;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionContext;
public class J2eeAction implements ServletRequestAware{
/**
* 注入:耦合:类实现接口 ServletRequestAware,ServletResponseAware
* 解耦:RequestAware 一般不用
*
* 非注入:耦合:ServletActionContext.getRequest();
ServletActionContext.getResponse();
解耦:ActionContext context = ActionContext.getContext();
context.get("全类名");
*/
private HttpServletRequest req;
public String execute() {
return null;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
this.req = arg0;
}
// @Override
// public void setRequest(Map<String, Object> arg0) {
// // TODO Auto-generated method stub
// this.req = arg0.get("权限令名");
// }
}