Strust2使用领域 对象接收用户输λ

来源:互联网 发布:微信公众号js sdk 编辑:程序博客网 时间:2024/06/05 00:44

Step1:在webroot目录下新建login.jsp文件,login.jsp向用户显示一个登陆表单,在用户输入用户名和密码后,提交个loginAction进行处理。login.jsp代码如下

<%@ taglib prefix="S" uri="/struts-tags" %><%@ taglib prefix="s" uri="/struts-tags" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body><S:form action="loginAction" method="POST">    <S:textfield name="userinfo.username"></S:textfield>    <s:textfield name="userinfo.pwd"></s:textfield>    <S:submit value="提交"></S:submit></S:form></body></html>
注意代码中以粗体显示的部分。在 Step4中将详细介绍为什么果用这种格式。

Step2

userinfo对象作为领域对象。用于接收用户输入的登陆信息。userinfo类代码如下:

public class Userinfo {    private String username;    private String pwd;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }}
Step3:编写loginAction类

LoginAction 时用户置最请求进行处理, LoginAction 的代码如下:

public class ActionUser implements Action{   private Userinfo userinfo;    public Userinfo getUserinfo() {        return userinfo;    }    public void setUserinfo(Userinfo userinfo) {        this.userinfo = userinfo;    }    public String execute() throws Exception {        if("admin".equals(userinfo.getUsername())&&"admin".equals(userinfo.getPwd())){            return SUCCESS;        }else{            return LOGIN;        }    }
为了简单起见,我们直接在execute()方法中对象用户登陆信息进行了判断,如果登陆成功,返回SUCCESS结果代码("index.jsp");如果登陆失败,执行LOGIN结果代码("login.jsp").
在置是页面 login.jsp中, 有这样两句代码:

  <S:textfield name="userinfo.username"></S:textfield>    <s:textfield name="userinfo.pwd"></s:textfield>
通过 Struts2 框架的散据拂直机制, 传递 user usemame 请求#数等同于调用:

action.getUserinfo.setUsername(.....)

但是我们注意到,在loginAction中,并没有创建如何的Userinfo类的实例对象,按理说程序应该会抛出NullPointerException。不过,在Struts2中不是什么问题,Struts2会遍历所有的请求参数,自动依次实例化如何用于填充数据的对象。例如:Struts2尝试设置Userinfo对象的username属性时,将依次调用一下方法:

action.getUserinfo();action.setUserinfo(new Userinfo);action.setUserinfo().setUsername();
Struts2 先尝试获得得 "UserInfo"'对象的引用,当它发现Userinfo对象为null时,它将使用Userinfo类的默认构造(无参构造方法)创建一个UserInfo实例,并调用actio的setUserInfo()方法设置这个实例,这样,Struts2就可以设置UserInfo对象的username字段了。

Step4:在Struts.xml文件中配置LoginAction:

代码如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"        "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <package name="default" namespace="/" extends="struts-default">        <action name="ActionUser" class="cn.happy.action.ActionUser">            <result name="success">/index.jsp</result>            <result name="login">/login.jsp</result>        </action>    </package></struts>