为了处理各种逻辑业务,根据execute方法来判断请求哪种业务,然后将请求转发到对应的业务处理上,
通过动态请求action对象中的方法,实现某个单一的业务逻辑处理。
动态action的应用
//创建action对象,添加add和update方法 import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private static final long serialVersionUID = 1L; private String info; public String add() throws Exception{ info = "添加信息"; return "add"; } public String update() throws Exception{ info = "更新信息"; return "update"; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } } //Struts.xml配置: <!--声明包 --> <package name="myPackage" extends="struts-default"> <action name="userAction" class="com.lyq.action.UserAction"> <result name="add">user_add.jsp</result> <result name="update">user_update.jsp</result> </action> </package> //user_add.jsp页面 <s:property value="info"/> //user_update.jsp页面 <s:property value="info"/> //通过两个超链接请求 <a href="userAction!add"> 添加</a> <a href="userAction!update">更新</a>
域模型DomainMModel
可以将一些属性封装成为一个实体对象,需要保存信息,直接就可以吧一个实体对象传过去
//user类 public class User { private String loginName; private String password; public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } //action中应用的User对象 import com.opensymphony.xwork2.ActionSupport; public class DomainModel extends ActionSupport { private User user; @Override public String execute() throws Exception { System.out.println(this.user.getLoginName() + "|" + this.user.getPassword()); if ("admin".equals(user.getLoginName())) { return SUCCESS; } else { return "error"; } } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } <%--javaBean接收/域模型DomainModel--%> <form action="javaBean" method="post"> 输入姓名<input type="text" name="user.loginName" id=""> <input type="password" name="user.password"> <input type="submit" value="提交"> </form>
!--用域模型配置信息-->
<package name="myPackage" extends="struts-default">
<action name="javaBean" class="com.lyq.action.DomainModel">
<result >user_add.jsp</result>
<result name="error">user_update.jsp</result>
</action>
</package>
驱动模型ModelDriven
在域模型中需要对指定参数名称为user.name方式,还是不方便,Struts2提供了不需要这样指定就直接对实体对象参数值,这就是ModelDrien
可以看出属性可以不指对象
映射的jsp
add页面
update页面