struts2動態方法呼叫與j2ee互動傳參
阿新 • • 發佈:2018-11-13
動態方法呼叫:
(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("許可權令名");
// }
}