歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

struts2從取值的方式

可以根據Action屬性的不同將它分為兩類:Field-Driven(屬性驅動) Action和Model-Driven(模型驅動) Action。
一、Field-Driven(屬性驅動)Action,Action擁有自己的屬性,這些屬性一般是Java的基本類型。表單字段直接和Action的屬性 對應。

二、實現了modelDriven接口可以在action中直接獲得例如User對象,它會將Object getModel()取得的User放到ValueStack中。可以理解為將這個User的屬性追加到Action中。它主要是作用是實現類似Struts的FormBean功能。

在struts2中,提供了一種直接使用領域對象的方式,就是讓action實現com.opensymphony.xwork2.ModelDriven接口,ModelDriven讓你可以直接操作應用程序中的領域對象,允許你在web層和業務層使用相同的對象。

ModelDriven接口只有一個方法
 public abstract java.lang.Object getModel();
該方法返回一個用於接收用戶輸入數據的對象模型,在這個模型對象中的屬性可以直接通過(屬性名)name來訪問,而不需要使用(對象名.屬性名)vo.name這種格式來訪問了,在action也不需要對對象提供getter和setter方法了,但是必須要在action中進行實例化,獲取參數方式:

1、使用默認的action的傳遞方式,即參數名和屬性名一一對應。

2、自定義一個vo,在action中使用這個vo,view使用vo.屬性名。
3、使用ModelDriven的方式。

ModelDriven的方式:

  1. public class UserVo {  
  2.     private String name;  
  3.     private String pwd;  
  4.     public String getName() {  
  5.         return name;  
  6.     }  
  7.     public void setName(String name) {  
  8.         this.name = name;  
  9.     }  
  10.     public String getPwd() {  
  11.         return pwd;  
  12.     }  
  13.     public void setPwd(String pwd) {  
  14.         this.pwd = pwd;  
  15.     }  
  16. }  

 

  1. import com.opensymphony.xwork2.ActionSupport;  
  2. import com.opensymphony.xwork2.ModelDriven;  
  3.   
  4. public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{  
  5.   
  6. }  
  1. import org.han.BaseAction;  
  2. import org.han.vo.UserVo;  
  3.   
  4. public class LoginAction extends BaseAction<UserVo>{  
  5.   
  6.     private UserVo vo=new UserVo();  
  7.     public UserVo getModel() {  
  8.         // TODO Auto-generated method stub   
  9.         return vo;  
  10.     }  
  11.     public String login(){  
  12.         System.out.println(vo.getName());  
  13.         return null;  
  14.     }  
  15.   
  16. }  

 

  1. <body>  
  2.   <form action="login!login.action" method="post">  
  3.     
  4.   <input type="text" name="name" />  
  5.   <input type="text" name="pwd" />  
  6.   <input type="submit" value="提交"/>  
  7.   </form>  
  8. </body>  

三種方法的總結:

第一種方法把form的值都放在action文件中,當form提交的項目很多的時候,action的內容將變得很多。項目少的時候可用。

第二種方法將form的值單獨放在vo中,解決了action文件臃腫的問題,同時使form和action分開,較好。但是需要在設置和獲取的jsp頁面上進行標識。

第三種方法在第二種方法的基礎上,通過實現特定的接口,去掉了action中的set和get方法,同時去掉了jsp頁面上的標識。使後台程序的logic更加清晰。

Copyright © Linux教程網 All Rights Reserved