天天看點

Struts2簡單了解Action

認識Action對象

   Action對象是Struts2架構的重要對象,主要用于對HTTP請求進行處理。在Struts2API中,Action對象是一個接口,主要位于xwork2包中(2.5版本以後并入到Struts2-core包中)

在Action接口中,包含5個靜态的成員變量,它們是Struts2API為處結果定義的靜态變量

  SUCCESS:代表Action執行成功的傳回值,如果Action執行成功,需要傳回到成功頁面,就可以将傳回值設定為SUCCESS。

  NONE:代表Action執行成功傳回值,但不需要傳回到成功頁面。

  ERROR:代表Action執行失敗傳回值。

  INPUT:代表需要傳回到某個輸入資訊頁面的傳回值。如驗證錯誤以後需要傳回錯誤資訊在頁面就可以設定為INPUT

  LOGIN:代表需要使用者登入的傳回值。

動态Action

想達到動态調用的目的方法有三種:

  1. actionName!methodName
  2. 指定method屬性
  3. 使用通配符

actionName!methodName使用

如在配置檔案中配置RegistAction,則action請求其中的add(方法的格式如下)

<form action="RegistAction!add">
    	使用者名:<input type="text" name="username"><br>
    	密碼  :<input type="password" name="pwd"><br>
        <input type="submit" value="注冊">
    </form>
           

重點學會*通配符使用   注意:在struts2的2.5版本以上使用*通配符需要加上

<gloal-allowed-methods>regex:.*</global-allowedd-methods>

也就是使用*号來代替一個或多個比對字元串,然後在class,method以及result中使用{n}來代表比對字元(n表示第n個比對的字元串)

使用*動态設定method

<action name="*_Action" class="com.demo.{1}Action" method="{1}">
    <result>{1}_success.jsp</result>
</action>
           

當請求為login_Action的時候,如上的{1}就等于“login”,也就是說調用com.demo.loginAction類中的login方法

請求成功的話跳轉為login_success.jsp頁面

Struts2接收參數的四種方式

  1. 使用action的屬性
package com.cszy.action;

import org.apache.commons.lang3.StringUtils;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
	//1.接收使用者名和密碼
	private String username;
	private String pwd;
	
	
	
	public String getUsername() {
		return username;
	}



	public void setUsername(String username) {
		this.username = username;
	}



	public String getPwd() {
		return pwd;
	}



	public void setPwd(String pwd) {
		this.pwd = pwd;
	}



	public String login() throws Exception {
		System.out.println(username + "-->" + pwd);
		return NONE;
	}

}
           

     2. 使用DomainModel(域模型)

     3. 使用ModelDriver接口【實作接口,手動初始化new實體類對象,調用getModel()方法,方法傳回值:return 實體類對象】

package com.lanou.Action;

import java.util.Map;

import com.lanou.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User>{
//	解耦方式
//	Map<String, Object> request = (Map)ActionContext.getContext().get("request");
	
	//自動注入
	private String username;	//使用者名
	private String password;	//密碼
	private String age;			//年齡
	private User user = new User();
	
	@Override
	public User getModel() {	//使用驅動模型ModelDriven
		return this.user;
	}
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getAge() {
		return age;
	}
	
	public void setAge(String age) {
		this.age = age;
	}
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public String jsp_reg(){
		System.out.println("我是注冊頁面");
		return "jsp_reg";
	}
	
	public String jsp_login(){
		System.out.println("我是登入頁面");
		return "jsp_login";
	}
	
	public String user_login(){
		System.out.println("*************************\n" + "使用者名:" + user.getUsername());
		System.out.println("密碼:" + user.getPassword() + "\n*************************");
		System.out.println("登入成功");
		return "login_success";
	}
	
	public String user_reg(){
		System.out.println(user.toString());
		System.out.println("*************************\n" + "使用者名:" + user.getUsername());
		System.out.println("密碼:" + user.getPassword());
		System.out.println("年齡:" + user.getAge() + "\n*************************");
		System.out.println("注冊成功");
		return "reg_success";
	}

}
           

     4. 使用正常的getParameter(與ServletAPI耦合,不提倡)