1. 程式人生 > >struts2動態方法呼叫與j2ee互動傳參

struts2動態方法呼叫與j2ee互動傳參

動態方法呼叫:

(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("許可權令名");
//	}
	
}