1、基本屬性注入
我們可以直接將表單數據項傳遞給Action,而Action只需要提供基本的屬性來接收參數即可,這種傳參方式稱為基本屬性注入。例如
jsp頁面:
<s:form method="post" action="/Login"> <s:textfield name="username" label="用戶名"/> <s:password name="password" label="密碼"/> <s:submit></s:submit> </s:form>
Action:
package action; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import models.User; 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(this.username) || !"123456".equals(this.password)){ return Action.LOGIN; } //用戶名和密碼正確 else{ return Action.SUCCESS; } } }
只需要在Action中提供username和password兩個屬性,並提供了setXXX()方法,就可以實現參數的自動傳遞,這里不需要成員變量的名稱和參數名稱一致,只需要setXXX()對於的屬性名和參數名相同就行
2、域模型注入
如果表單上的數據項很多,我們可以將表單中的數據項封裝成實體對象后傳遞給Action,而Action需要提供實體對象屬性來接收參數,這種傳參的方式稱為域模型注入。
如上面例子,可以先定義一個User實體類
package models; 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; } }
在Action中
package action; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import models.User; public class LoginAction { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String execute(){ //用戶名或密碼錯誤 if(user==null || !"admin".equals(user.getUsername()) || !"123456".equals(user.getPassword())){ return Action.LOGIN; } //用戶名和密碼正確 else{ return Action.SUCCESS; } } }
jsp頁面:
<s:textfield name="user.username" label="用戶名"/> <s:password name="user.password" label="密碼"/> <s:submit></s:submit>
3、模型驅動傳參數(Model Driven)
Action:
package action; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ModelDriven; import models.User; public class LoginAction implements ModelDriven<User>{ private User user=new User(); public String login(){ //用戶名或密碼錯誤 if(user==null || !"admin".equals(user.getUsername()) || !"123456".equals(user.getPassword())){ return Action.LOGIN; } //用戶名和密碼正確 else{ return Action.SUCCESS; } } public User getModel() { // TODO Auto-generated method stub return user; } }
JSP頁面
<s:textfield name="username" label="用戶名"/> <s:password name="password" label="密碼"/> <s:submit></s:submit>
