認識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
想達到動态調用的目的方法有三種:
- actionName!methodName
- 指定method屬性
- 使用通配符
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接收參數的四種方式
- 使用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耦合,不提倡)