日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(九)模型驱动和属性驱动

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (九)模型驱动和属性驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

出于結構清晰的考慮,應該采用單獨的Model實例來封裝請求參數和處理結果,這就是所謂的模型驅動,

所謂模型驅動,就是使用單獨的JavaBean來貫穿整個MVC流程。

所謂屬性驅動,就是使用屬性來作為貫穿MVC流程的信息攜帶者,當然屬性必須依附于對象,

這個對象就是Action實例。 簡單說,模型驅動就是使用單獨的javaBean封裝請求參數。 屬性驅動就是把屬性寫在Action類中。

?

我們發現上一章的jsp中的name必須前面得加 user.username。。太過麻煩。我們使用模型驅動來解決這個問題。實際開發中使用這種方式

一、模型驅動的要求

1.動作類實現ModelDriven接口

2.實現接口中的getModel方法,返回我們的數據對象。(實現中用泛型將確定傳入模型 implements ModelDriven<?>

3.數據模型對象必須由我們實例化。

例子:

public class AdduserAction extends ActionSupport implements ModelDriven<User>{//數據模型對象由我們實例化private User user=new User();public User getUser() {System.out.println("getuser");return user;}public void setUser(User user) { System.out.println("setuser");this.user = user;}public String adduser(){ System.out.println(user.getUsername()+":"+user.getAge());return null;}//實現接口方法,返回我們的數據模型對象public User getModel() {// TODO Auto-generated method stubreturn user;}}

?

 我們在jsp上就能像以前那樣 ,name只用我們的參數相同即可 

<body><form action="${pageContext.request.contextPath }/action1" method="post">用戶名:<input type="text" name="username"><br>年 齡:<input type="text" name="age"><br><input type="submit" value="提交"></form></body>

  原理:

其實這時候表單的name已經不僅僅是一個簡單的字符串了。 這一系列的操作是由ModelDriven和params攔截器幫我們做的 。 params攔截器負責提取請求參數,如果是屬性驅動模式,則還負責將請求參數傳給Action類的屬性 模型驅動的話就只提取請求參數。 ModelDriven攔截器會先判斷我們的動作類是否屬于ModelDriven類型 屬于的話,就調用我們實現的getModel方法,獲取我們傳入的對象 然后將我們的對象給壓入棧中

?

?

?

?

附:struts2注冊案例

(1)我們先創建數據庫表

create database demo;use demo;create table user(username varchar(100) primary key,password varchar(100),birthday date,hobby varchar(255),married boolean);

(2)在domain包創建我們的user實體類  

public class User {private String username;//用戶名private String password;//密碼private Date birthday; //生日private String hobby; //愛好private boolean married; //是否結婚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 Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}public boolean isMarried() {return married;}public void setMarried(boolean married) {this.married = married;}}

(3)完成數據層,我們在Dao層處理數據

public class UserDao {QueryRunner qr=new QueryRunner(JdbcUtils.getDataSource()); //根據名字查找用戶public User findUserByUsername(String username){try {String sql="select * from user where username=?";return qr.query(sql, new BeanHandler<User>(User.class),username);} catch (Exception e) {throw new RuntimeException(e);}}//添加用戶public int addUser(User user){String sql="insert into user values(?,?,?,?,?)";Object []params={user.getUsername(),user.getPassword(),user.getBirthday(),user.getHobby(),user.isMarried()};try {return qr.update(sql,params);} catch (SQLException e) {throw new RuntimeException(e);}}}

(4)完成業務邏輯層的編寫,service層  

public class UserService {private UserDao userdao=new UserDao(); //注冊public int regist(User user){return userdao.addUser(user);}//通過用戶名查找用戶public User findByUsername(String username){return userdao.findUserByUsername(username);}}

(5)創建web層,我們創建web層動作類    

public class UserAction extends ActionSupport implements ModelDriven{private User user=new User();private UserService userservice=new UserService(); //注冊方法public String regist(){ User _user=userservice.findByUsername(user.getUsername()); //判斷用戶是否存在,存在返回exists字符串if(_user!=null){return "exists";} //獲取注冊成功更新的行數 int count=userservice.regist(user); //如果>0,返回success if(count>0){return SUCCESS;}return null;}public Object getModel() {// TODO Auto-generated method stubreturn user;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}

(6)我們編寫注冊的jsp頁面

<body><form action="${pageContext.request.contextPath }/regist.action" method="post">用戶名:<input type="text" name="username"><br>密 碼:<input type="password" name="password"><br>生 日:<input type="text" name="birthday"><br>愛好:<input type="checkbox" name="hobby" value="籃球">籃球<input type="checkbox" name="hobby" value="足球">足球<input type="checkbox" name="hobby" value="寫代碼">寫代碼<br>已婚:<input type="checkbox" name="married" value="true"><br><input type="submit" name="注冊"><br></form></body>

(7)配置 struts.xml  

 

<package name="p1" extends="struts-default"><action name="regist" class="com.cad.web.action.UserAction" method="regist"><result name="success">/success.jsp</result><result name="exists">/msg.jsp</result></action></package>

  

 

  

  

?

轉載于:https://www.cnblogs.com/yuexiaoyun/p/9448178.html

總結

以上是生活随笔為你收集整理的(九)模型驱动和属性驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。