zoukankan      html  css  js  c++  java
  • 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 这样的空资源文件

  • 相关阅读:
    Report parameters
    维护SE16N Maintain entries
    SE16N Related &SAP_EDIT (转载)
    SD增强 MV45AFZZ
    原始系统问题SE03 Original System
    eclipse 连接不上HBase集群
    Hadoop hdfs yarn HA
    hadoop手动启动jobhistory
    hadoop错误提示 exitCode: 1 due to: Exception from container-launch.
    no filesystem for scheme hdfs
  • 原文地址:https://www.cnblogs.com/lichone2010/p/3464161.html
Copyright © 2011-2022 走看看