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>