16.9 完成更新用户模块

16.9.1 创建用户更新页

新建用户详细信息显示页,页面中包含一个表单,用来输入用户信息,代码如下所示。

        <%@page contentType="text/html; charset=gb2312"%>
        <%@taglib prefix="s" uri="/struts-tags"%>
        <html>
        <head>
              <title>更新产品</title>
        </head>
        <body>
        <center>
              <h2>更新产品</h2>
              <s:actionerror/>
              <s:form action="update">
                  <s:set name="id" value="#parameters.id[0]"></s:set>
                  <s:textfield label="用户ID" name="id"></s:textfield>
                  <s:textfield label="用户名" name="username"></s:textfield>
                  <s:password label="密码" name="password"></s:password>
                  <s:textfield label="年龄" name="age"></s:textfield>
                  <s:textfield label="生日" name="birth"></s:textfield>
                  <s:textfield label="邮箱地址" name="email"></s:textfield>
                  <s:submit value="更新"></s:submit>
                  <s:reset value="重置"></s:reset>
              </s:form>
        </center>
        </body>
        </html>

16.9.2 创建用户更新控制器

新建业务控制器UpdateAction,该Action负责接受用户添加页提交的用户信息,并通过业务逻辑组件更新用户信息,代码如下所示。

        package net.hncu.action;
        import java.util.Date;
        import net.hncu.po.User;
        import net.hncu.service.UserService;
        import com.opensymphony.xwork2.ActionSupport;
        public class UpdateAction extends ActionSupport{
              //用户ID
              private int id;
              //用户名
              private String username;
              //密码
              private String password;
              //年龄
              private int age;
              //生日
              private Date birth;
              //email地址
              private String email;
              //业务逻辑组件
              private UserService userService;
              //设置业务逻辑组件
              public void setUserService(UserService userService) {
                    this.userService = userService;
              }
              public int getId() {
                    return id;
              }
              public void setId(int id) {
                    this.id = id;
              }
              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 int getAge() {
                    return age;
              }
              public void setAge(int age) {
                this.age = age;
          }
          public Date getBirth() {
                return birth;
          }
          public void setBirth(Date birth) {
                this.birth = birth;
          }
          public String getEmail() {
                return email;
          }
          public void setEmail(String email) {
                this.email = email;
          }
          public String execute() throws Exception {
                User user = new User();
                user.setId(id);
                user.setUsername(username);
                user.setPassword(password);
                user.setAge(age);
                user.setBirth(birth);
                user.setEmail(email);
                //调用业务逻辑组件保存该用户
                if(userService.updateUser(user)){
                      return SUCCESS;
                }else {
                      return ERROR;
                }
          }
    }

16.9.3 配置用户更新控制器

在Spring配置文件中配置业务控制器updateAction,并为其注入业务逻辑组件,代码如下所示。

    <! -- 创建updateAction实例 -->
    <bean id="updateAction" class="net.hncu.action.UpdateAction" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>

在“struts.xml”文件中配置updateAction,并定义处理结果与视图资源之间的关系,代码如下所示。

    <action name="update" class="updateAction">
          <! -- 定义处理结果与视图资源之间的关系-->
          <result name="success" type="redirect">/showAll.action</result>
          <result name="input">/add.jsp</result>
          <result name="error">/update.jsp</result>
    </action>

16.9.4 创建校验规则文件

新建校验规则文件,其中包含如下输入校验规则。

(1)用户名、密码、确认密码必须输入。

(2)用户名只能是数字或者字母,长度在6~20之间。

(3)密码、确认密码必须是数字或者字母,长度在6~20之间。

(4)密码和确认密码必须相同。

(5)年龄必须为整数而且必须是有效的年龄值。

(6)出生日期必须为正确的日期格式如1988-01-03,而且只能在1900-1-1~2010-1-1之间。

(7)邮箱地址必须为合法的邮箱地址。

通过以上校验规则,编写校验规则文件,代码如下所示。

    <? xml version="1.0" encoding="UTF-8"? >
    <! DOCTYPE validators PUBLIC
            "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
            "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
    <validators>
          <validator type="requiredstring">
                <param name="fieldName">username</param>
                <param name="trim">true</param>
                <message>必须输入用户名</message>
          </validator>
          <validator type="regex">
                <param name="fieldName">username</param>
                <param name="expression"><! [CDATA[(\w{6,20})]]></param>
                <message>用户名长度必须在620之间</message>
          </validator>
          <validator type="requiredstring">
                <param name="fieldName">password</param>
                <param name="trim">true</param>
                <message>必须输入密码</message>
          </validator>
          <validator type="regex">
                <param name="fieldName">password</param>
                <param name="expression"><! [CDATA[(\w{6,20})]]></param>
                <message>密码长度必须在620之间</message>
          </validator>
          <validator type="int">
                <param name="fieldName">age</param>
                <param name="min">1</param>
                <param name="max">120</param>
                <message>年龄必须在${min}${max}之间</message>
          </validator>
          <validator type="date">
                <param name="fieldName">birth</param>
                <param name="min">1900-01-01</param>
                <param name="max">2010-01-01</param>
                    <message>出生日期必须在1900-01-01~2010-01-01之间</message>
              </validator>
              <validator type="email">
                    <param name="fieldName">email</param>
                    <message>请输入有效的电子邮箱地址</message>
              </validator>
        </validators>

16.9.5 测试更新用户

在用户列表页中,单击相应用户中的“更新”链接即可跳转到用户信息更新页,如图16.8所示。

在页面中输入需要更新的用户信息,单击“更新”按钮进行更新。更新完成后,页面将跳转回用户列表页,通过单击该用户ID的链接跳转到用户详细信息页,如图16.9所示,从页面中可以看出,用户的信息已经被更新了。

图16.8 注册用户更新页

图16.9 用户详细信息页