歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> struts2從取值的方式

struts2從取值的方式

日期:2017/3/1 10:09:55   编辑:Linux編程

可以根據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. public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{
  4. }
  1. import org.han.BaseAction;
  2. import org.han.vo.UserVo;
  3. public class LoginAction extends BaseAction<UserVo>{
  4. private UserVo vo=new UserVo();
  5. public UserVo getModel() {
  6. // TODO Auto-generated method stub
  7. return vo;
  8. }
  9. public String login(){
  10. System.out.println(vo.getName());
  11. return null;
  12. }
  13. }

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

三種方法的總結:

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

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

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

Copyright © Linux教程網 All Rights Reserved