Struts 2.0支持更高级的POJO访问,先定义一个User.java类。把username和password属性,从Login类中分离出来,它可以使系统结构更清晰,对开发多层系统尤其有用。
User.java
package com.bulktree.struts2;public class User { private String username; private String password; public String getUsername() { System.out.println("******getUsername()******"); return username; } public void setUsername(String username) { System.out.println("*******setUsername()********"); this.username = username; } public String getPassword() { System.out.println("******getPassword()*******"); return password; } public void setPassword(String password) { System.out.println("******setPassword()*********"); this.password = password; }}login2.jsp
struts.xml文件中action配置: /welcome.jsp /login2.jsp LoginAction2.java:package com.bulktree.struts2;import com.opensymphony.xwork2.ActionSupport;public class LoginAction2 extends ActionSupport { private User user; private String message; public void setUser(User user) { System.out.println("********setUser()***********"); this.user = user; } public User getUser() { System.out.println("*********getUser()*************"); return user; } public String getMessage() { System.out.println("************getMessage()********"); return message; } @Override public String execute() throws Exception { System.out.println("*****execute()******"); if("bulktree".equals(user.getUsername()) && "oakertree".equals(user.getPassword())) { message = "Welcome, " + user.getUsername(); } else { message = "Error!"; } return ActionSupport.SUCCESS; } @Override public void validate() { System.out.println("******validate()******"); if(null == user.getUsername() || user.getUsername().length() < 5) { this.addFieldError("username","USERNAME ERROR"); } if(null == user.getPassword() || user.getPassword().length() < 5) { this.addFieldError("password","PASSWORD ERROR"); } }}
welcome.jsp:
YOUR USERNAME:
YOUR PASSWORD:控制台输出及分析:*********getUser()************* //得到User类的实例********setUser()*********** //执行setUser(),准备赋值操作******setPassword()********* //set赋值操作,此时是真正的赋值*********getUser()************* //得到User类的实例*******setUsername()******** //set赋值操作,此时是真正的赋值以上有struts2框架自动执行******validate()****** //表单验证******getUsername()****** //表单验证时调用get方法(判断username)******getUsername()****** //表单验证时第二次调用get方法(判断username)******getPassword()******* //表单验证时调用get方法(判断password)******getPassword()******* //表单验证时第二次调用get方法(判断password)*****execute()****** //业务逻辑******getUsername()****** //调用get方法******getPassword()******* //调用get方法一下由Struts2框架自动执行*********getUser()************* //得到User类的实例******getUsername()****** //自动执行get方法********getUser()************* //得到User类的实例******getPassword()******* //自动执行get方法
我们可以把类的属性分离出来实现系统架构清晰、明了。
与其临渊羡鱼,不如退而结网。