【SSH快速進階】——struts2的模型驅動—ModelDriven
阿新 • • 發佈:2019-02-12
上篇部落格《SSH快速進階——struts2簡單的例項》中,處理使用者登陸的action—LoginAction為:
package com.danny.user.action;
public class LoginAction {
private String username;
private String password;
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 execute() {
if("admin".equals(username) && "admin".equals(password))
{
return "success";
}else{
return "error";
}
}
}
可以發現,LoginAction中的屬性和jsp頁面表單中的input都是一 一對應的,這就是struts2的屬性驅動。但這是登陸頁面,只有使用者名稱和密碼,如果客戶需要你做個這樣的頁面呢?
我想你只能呵呵了吧~~
這時候如果再用第一種方式也就是屬性驅動來傳值,您肯定能夠想象到action中能有多亂吧,光定義屬性的程式碼就能佔200行~~
所以這時候可以考慮用struts2中的另一種傳值方式——模型驅動。
為了簡單說明,還用上篇部落格中的例子來說明。
如果上篇部落格中的LoginAction需要用模型驅動,那麼只需要新增一個模型User.java,修改一下LoginAction即可。
User.java
package com.danny.user.vo;
public class User {
private String username;
private String password;
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;
}
}
LoginAction.java
package com.danny.user.action;
import com.danny.user.vo.*;
import com.opensymphony.xwork2.ModelDriven;
//要實現模型驅動的Action需要實現ModelDriven介面
public class LoginAction implements ModelDriven{
//必須定義並例項化模型例項
private User user=new User();
//實現getModel方法,用於獲取例項物件
@Override
public Object getModel() {
return user;
}
//引用模型例項
public String execute() {
if("admin".equals(user.getUsername()) && "admin".equals(user.getPassword()))
{
return "success";
}else{
return "error";
}
}
}
LoginAction修改的地方有:
1、實現了ModelDriven介面;
2、去掉了欄位和屬性的定義,取而代之的是定義並例項化了模型物件,實現getModel方法用於獲取物件,在其他成員方法中就可以直接引用此物件。
需要注意的是,頁面表單input的name屬性值必須和模型(比如這裡的User.java)的get、set方法後面的名字一樣。比如表單中某一個input的name屬性值為“username”,那麼相應的get方法名為“getUsername”或“getusername”(不區分大小寫)。