发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

Struts2表单请求流程(二)— Struts2高级的POJO访问



Struts2表单请求流程(二)— Struts2高级的POJO访问

http://www.blogjava.net/bulktree/archive/2007/12/29/171615.html

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
<s:form action="login2" method="post">
        <s:textfield name="user.username" label="USERNAME" tooltip="Enter Your UserName"></s:textfield>
        <s:password name= "user.password" label="PASSWORD" tooltip="Enter Your PassWord"></s:password>
        <s:submit label="login"></s:submit>
    </s:form>


struts.xml文件中action配置:
<action name="login2" class="com.bulktree.struts2.LoginAction2">
            <result name="success">/welcome.jsp</result>
            <result name="input">/login2.jsp</result>
        </action>


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:<FONT size="5" color="red"><s:property value="user.username"/></FONT><br>
    YOUR PASSWORD:<FONT size="5" color="red"><s:property value="user.password"/></FONT><br>

控制台输出及分析:
*********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方法

我们可以把类的属性分离出来实现系统架构清晰、明了。
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:Struts2表单请求流程(二)— Struts2高级的POJO访问

不错!支持
编辑 回复 快速回复 TOP
发新话题