struts学习:传统方法完成struts注册表单校验与回显数据

1、创建Web项目,并导入struts框架所需要的jar包.

 

2、从struts 框架包中 复制struts-config.xml 修改 代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">


<struts-config>

    <form-beans>
        <form-bean name="UserFormBean" type="cn.itcast.web.formbean.UserFormBean"></form-bean>
    </form-beans>


    <action-mappings>
        <action path="/RegisterUI" forward="/WEB-INF/jsp/register.jsp"/>
        
        <action path="/Register" 
                type="cn.itcast.web.action.RegisterAction"
                name="UserFormBean"
                scope="request"
                validate="true"
                input="/WEB-INF/jsp/register.jsp"
                >
                
            <forward name="success" path="/success.jsp"></forward>    
            <forward name="message" path="/message.jsp"></forward>    
                
                
        </action>
        
    </action-mappings>
    
    
    <message-resources parameter="MessageResource"/>

</struts-config>

3、配置web.xml .

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  
      
  <servlet>
      <servlet-name>ActionServlet</servlet-name>
      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
      <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
      </init-param>
      
      <load-on-startup>2</load-on-startup>
  </servlet>
  
  
  <servlet-mapping>
      <servlet-name>ActionServlet</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

4、创建action RegisterAction 复写 excute 方法

@Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        try{
        
            System.out.println("处理用户注册请求.....");
            return mapping.findForward("success");
        }catch (Exception e) {
            e.printStackTrace();
            request.setAttribute("message", e.getMessage());
            return mapping.findForward("message");
        }
    }

5、golobals 全局包创建枚举值存放性别和爱好

public enum Gender {
    MALE("male","男"),FEMALE("female","女");
    
    private String name;
    private String value;
    private Gender(String name,String value){
        this.name= name;
        this.value = value;
    }
    public String getName() {
        return name;
    }
    public String getValue() {
        return value;
    }
}

6、创建formbean 其中进行传统的表单验证

@Override
    public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
        
        ActionErrors errors = new ActionErrors();
        
         //用户名不能为空,并且要是3-8位的字母
        if(isEmpty(this.username)){
            addMessage(errors, "username", "用户名不能为空");
        }else{
            if(!this.username.matches("[A-Za-z]{3,9}")){
                addMessage(errors,"username", "用户名必须是3-8位字母");
            }
        }
        
        //密码不能为空,要是3-9的字母或数字
        if(isEmpty(this.password)){
            addMessage(errors, "password", "密码不能为空");
        }else{
            if(!this.password.matches("\\w{3,9}")){
                addMessage(errors,"password", "密码必须是3-8位字母或数字");
            }
        }
        
        //二次密码不能为空,并且要和一次密码一致
        if(isEmpty(this.password2)){
            addMessage(errors, "password2", "密码不能为空");
        }else{
            if(this.password2.equals(this.password)){
                addMessage(errors,"password2", "两次密码必须要一致");
            }
        }
        
        //性别不能为空,并且要是枚举的一个实例的值
        if(isEmpty(this.gender)){
            addMessage(errors, "gender", "性别不能为空");
        }else{
            try{
                Gender.valueOf(this.gender.toUpperCase());
            }catch (Exception e) {
                addMessage(errors, "gender", "性别非法");
            }
        }
        
        //生日可以为空,不为空时,要是一个日期
        if(!isEmpty(this.birthday)){
            try{
            DateLocaleConverter conver = new DateLocaleConverter();
            conver.convert(this.birthday);
            }catch (Exception e) {
                addMessage(errors, "birthday", "生日不能一个合法的日期");
            }
        }
        
        //收入要是一个数字,可以为空
        if(!isEmpty(this.income)){
            try{
            Double.parseDouble(this.income);
            }catch (Exception e) {
                addMessage(errors, "income", "收入要是一个数字");
            }
        }
        
        
        //爱好可以为空,不为空时要是合法的枚举值:String[] preference;
        if(this.preference!=null && this.preference.length>0){
            for(String pre : this.preference){
                try{
                Preference.valueOf(pre.toUpperCase());
                }catch (Exception e) {
                    addMessage(errors, "preference", "爱好输入有误");
                }
            }
        }
        
        
        //邮箱可以为空,不为空时,要是一个格式有效的邮箱
        if(!isEmpty(this.email)){
            if(!this.email.matches("\\w+@\\w+(\\.\\w+)+")){
                addMessage(errors, "email", "邮箱格式非法");
            }
        }
        
        return errors;
    }
    
    private boolean isEmpty(String value){
        if(value==null || value.trim().equals("")){
            return true;
        }
        return false;
    }
    
    private void addMessage(ActionErrors errors,String key,String message){
        errors.add(key,new ActionMessage(message,false));
    }

7、注册界面

<table width="50%" frame="border">
          <tr>
              <td>用户名</td>
              <td>
                  <input type="text" name="username" value="${UserFormBean.username }">
              </td>
              <td>
                  <html:errors property="username"/>                
              </td>
          </tr>
          
          <tr>
              <td>密码</td>
              <td>
                  <input type="password" name="password" value="${UserFormBean.password }">
              </td>
              
              <td>
                  <html:errors property="password"/>                
              </td>
          </tr>
          
          <tr>
              <td>确认密码</td>
              <td>
                  <input type="password" name="password2" value="${UserFormBean.password2 }">
              </td>
              <td>
                  <html:errors property="password2"/>                
              </td>
          </tr>
          
          <tr>
              <td>性别</td>
              <td>
                  <c:forEach var="g" items="<%=Gender.values() %>">
                      <input type="radio" name="gender" value="${g.name }" ${UserFormBean.gender==g.name?'checked':'' }>${g.value }
                  </c:forEach>
              </td>
              <td>
                  <html:errors property="gender"/>                
              </td>
          </tr>
          

          
          <tr>
              <td>生日</td>
              <td>
                  <input type="text" name="birthday" value="${UserFormBean.birthday }">
              </td>
              <td>
                  <html:errors property="birthday"/>                
              </td>
          </tr>
          
          <tr>
              <td>收入</td>
              <td>
                  <input type="text" name="income" value="${UserFormBean.income }">
              </td>
              <td>
                  <html:errors property="income"/>                
              </td>
          </tr>
          
          <tr>
              <td>城市</td>
              <td>
                  <select name="city">
                      <option value="beijing" ${UserFormBean.city=='beijing'?'selected':'' }>北京</option>
                      <option value="guangzhou" ${UserFormBean.city=='guangzhou'?'selected':'' }>广州</option>
                      <option value="shanghai" ${UserFormBean.city=='shanghai'?'selected':'' }>上海</option>
                  </select>
              </td>
              <td>
                          
              </td>
          </tr>
          
          <tr>
              <td>爱好</td>
              <td>  
                  <c:forEach var="pre" items="<%=Preference.values() %>">
                      <input type="checkbox" name="preference" value="${pre.name }" ${fn:contains(fn:join(UserFormBean.preference,","),pre.name)?'checked':'' }>${pre.value }
                  </c:forEach>
              </td>
              <td>
                  <html:errors property="preference"/>                
              </td>
          </tr>
          
          <tr>
              <td>邮箱</td>
              <td>
                  <input type="text" name="email" value="${UserFormBean.email }">
              </td>
              <td>
                  <html:errors property="email"/>                
              </td>
          </tr>
          
          <tr>
              <td>
                  <input type="reset" value="清空">
              </td>
              <td>
                  <input type="submit" value="注册">
              </td>
          </tr>
      
      
      </table>

注意,这个还需要一个MessageResource.properties 这样的空资源文件

posted @ 2013-12-08 19:40  亂舞春秋  阅读(297)  评论(0编辑  收藏  举报