zoukankan      html  css  js  c++  java
  • 6-struts2核心业务(国际化,数据验证,模型驱动)

    目录:

    1. 国际化
    2. 数据验证
    3. 模型驱动

     国际化:

      文字国际化:指在程序不做任何修改的情况下,就可以在不同国家地区和语言环境下,按照当地习惯修改显示字符。

    实现国际化方式

    1. 以前使用ResourceBundle类中的getBundle()方法绑定指定国家的资源包(资源包规则:包名_语言简写_国家简称.properties)
    2. jsp页面中:<fmt:setBundle name="包名_语言简写_国家简称.properties"/>    绑定资源<fmt:message key="user"/>
    3. struts2:
      • 准备不同国家的资源包:
        • 中国: message_zh_CN.properties 
        • 美国: message_en_US.properties
        • 英国:  message_en_GB.properties   
        在struts.xml中指定资源包加载的常量
      • struts.custom.i18n.resources=message。在struts.xml文件中配置相应常量struts.custom.i18n.resources,指定国际化资源文件的基名,服务器在加载struts.xml时回自动加载前缀是message的国际化资源文件。
      • <?xml version="1.0" encoding="UTF-8" ?>
        
        <!DOCTYPE struts PUBLIC
                "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
                "http://struts.apache.org/dtds/struts-2.5.dtd">
        
        <struts>
            <!-- 指定国际化资源包加载的路径 -->
            <constant name="struts.custom.i18n.resources" value="resources.message"></constant>
        </struts>
        View Code
    4. 在页面上使用资源包的内容
      • <s:text name="user"/>
      • <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
        <%@ taglib uri="/struts-tags" prefix="s"%>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        
        
        <title>国际化资源包</title>
        
        </head>
        
        <body>
            <%--获取国际化资源包内容 --%>
            <form action="#">
                <s:text name="user"></s:text><input type="text" name="name">
                <s:text name="password"></s:text><input type="password" name="password">
                <input type="submit" value='<s:text name="login"></s:text>'>
            </form>
            
            
        </body>
        </html>
        success.jsp
        package i_18i;
        
        import com.opensymphony.xwork2.ActionSupport;
        
        public class UserAction extends ActionSupport{
            @Override
            public String execute() throws Exception {
                String name = super.getText("user");
                System.out.println(name);
                return "success";
            }
        }
        UserAction.java

    表单数据验证:

    对异常输入的过滤就是数据校验。

    • 数据校验一般分为两种:
      1. 前台校验:客户端校验,通过javaScript编程方式进行表单数据校验。
      2. 后台校验:服务器端校验,使用struts2通过xml配置方式进行表单数据校验

    struts2给开发者提供了四种方式的后台数据校验:

    1. 用代码方式对action的所有方法进行验证
      • action类继承ActionSupport并重写validate方法   (validate()方法对当前Action下的所有方法都会有效!!!!)          

         之后会在执行action逻辑代码之前执行validate方法

      • struts.xml文件中对应的action配置加上input视图,然后struts2就会自动把错误信息转发到input视图的页面上去
      • input视图页面上,打印出错误信息
      • package b_validate;
        
        import com.opensymphony.xwork2.ActionSupport;
        
        public class UserAction extends ActionSupport {
        
            private User user;
        
            /**
             * 如果validate方法中出现异常,则会返回错误页面 如果validate方法没有出现异常,则直接调用action中的业务逻辑代码
             */
            @Override
            public void validate() {
                // 在这里写表单数据验证逻辑
                if (user.getName() == null || user.getName().equals("")) {
                    // 保存错误信息,显示错误信息
                    super.addFieldError("user.error.requried", "用户名不能为空");
                }
                if (user.getPassword() == null || user.getPassword().equals("")) {
                    // 密码为空
                    // 把错误信息放入错误信息Map集合
                    super.addFieldError("password.error.requried", "密码不能为空!");
                }
        
            }
        
            public String register() throws Exception {
                String name = super.getText("user");
                System.out.println("****" + name);
                return "success";
            }
        
            public User getUser() {
                return user;
            }
        
            public void setUser(User user) {
                this.user = user;
            }
        
        }
        UserAction.java
        <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
        <%@ taglib uri="/struts-tags" prefix="s"%>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        
        
        <title>validate</title>
        
        </head>
        
        <body>
        <%--打印错误信息 --%>
        <font color="red"><s:fielderror></s:fielderror></font>
            <form action="${pageContext.request.contextPath}/validate/user_register" method="post">
                <s:text name="user"></s:text><input type="text" name="user.name">
                <s:text name="password"></s:text><input type="password" name="user.password">
                <input type="submit" value='<s:text name="login"></s:text>'>
            </form>
            
            
        </body>
        </html>
        register.jsp
        <?xml version="1.0" encoding="UTF-8" ?>
        
        <!DOCTYPE struts PUBLIC
                "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
                "http://struts.apache.org/dtds/struts-2.5.dtd">
        
        <struts>
            <package name="validate" extends="struts-default" namespace="/validate">
            <global-allowed-methods>register</global-allowed-methods>
                <action name="user_*" class="b_validate.UserAction" method="{1}">
                    <result>/success.jsp</result>
                    <result name="input">/register.jsp</result>
                </action>
            </package>
        </struts>
        struts_validate.xml
        package b_validate;
        
        public class User {
            private String name;
            private String password;
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getPassword() {
                return password;
            }
            public void setPassword(String password) {
                this.password = password;
            }
            
            
        }
        User.java

    2. 用代码方式对action的指定方法进行验证
      •  方式一中的验证方法名称改为  validate+需要验证的方法名称,只有此处与方式一不同,其他都相同。

          例如: validateRegister()   ->  只能验证register()方法

        • package b_validate;
          
          import com.opensymphony.xwork2.ActionSupport;
          
          public class UserAction extends ActionSupport {
          
              private User user;
              
              public void validateRegister(){
                  // 在这里写表单数据验证逻辑
                  if (user.getName() == null || user.getName().equals("")) {
                      // 保存错误信息,显示错误信息
                      super.addFieldError("user.error.requried", "用户名不能为空");
                  }
                  if (user.getPassword() == null || user.getPassword().equals("")) {
                      // 密码为空
                      // 把错误信息放入错误信息Map集合
                      super.addFieldError("password.error.requried", "密码不能为空!");
                  }
              }
          
              public String register() throws Exception {
                  String name = super.getText("user");
                  System.out.println("****" + name);
                  return "success";
              }
              
          
              public User getUser() {
                  return user;
              }
          
              public void setUser(User user) {
                  this.user = user;
              }
          
          }
          UserAction.java
          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
          <%@ taglib uri="/struts-tags" prefix="s"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <title>validate</title>
          <style type="text/css">
              ul, ul li{
                  display: inline;
              }
          </style>
          </head>
          
          <body>
              <%--打印所有错误信息 --%>
              <font color="red"><s:fielderror></s:fielderror></font>
              <form
                  action="${pageContext.request.contextPath}/validate/user_register"
                  method="post">
                  
                  <s:text name="user"></s:text>
                  <input type="text" name="user.name">
                  <s:fielderror fieldName="user.error.requried"></s:fielderror><br>
                  
                  <s:text name="password"></s:text>
                  <input type="password" name="user.password">
                  <s:fielderror fieldName="password.error.requried"></s:fielderror><br>
                  
                  <input type="submit" value='<s:text name="login"></s:text>'>
              </form>
          
          
          </body>
          </html>
          register.jsp

          以上这两种方式都是使用代码在程序写死了!!!------->进行改进:

    3. 用xml配置方式对action的所有方法进行验证
      • 编写一个xml文件,名称:  Action文件名-validation.xml。 该xml文件必须放在Action文件的同一目录
      • <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
        <%@ taglib uri="/struts-tags" prefix="s"%>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <title>validate</title>
        <style type="text/css">
            ul, ul li{
                display: inline;
            }
        </style>
        </head>
        
        <body>
            <form
                action="${pageContext.request.contextPath}/validate/user_register"
                method="post">
                
                <s:text name="user"></s:text>
                <input type="text" name="user.name">
                <s:fielderror fieldName="user.name"></s:fielderror><br>
                
                <s:text name="password"></s:text>
                <input type="password" name="user.password">
                <s:fielderror fieldName="user.password"></s:fielderror><br>
                
                <input type="submit" value='<s:text name="login"></s:text>'>
            </form>
        
        
        </body>
        </html>
        register.jsp
        package b_validate;
        
        import com.opensymphony.xwork2.ActionSupport;
        
        public class UserAction extends ActionSupport {
        
            private User user;
            
            public String register() throws Exception {
                String name = super.getText("user");
                System.out.println("****" + name);
                return "success";
            }
            
            public User getUser() {
                return user;
            }
        
            public void setUser(User user) {
                this.user = user;
            }
        
        }
        UserAction.java
        package b_validate;
        
        public class User {
            private String name;
            private String password;
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getPassword() {
                return password;
            }
            public void setPassword(String password) {
                this.password = password;
            }
            
            
        }
        User.java
        <?xml version="1.0" encoding="utf-8"?>
        <!DOCTYPE validators PUBLIC 
                  "-//Apache Struts//XWork Validator 1.0.2//EN"
                  "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
        
        <validators>
            <!-- 验证用户名 -->
            <field name="user.name">
                <!-- type表示xwork中定义的可以使用的验证类型
                (在/com/opensymphony/xwork2/validator/validators/default.xml中查看) -->
                <field-validator type="requiredstring">
                    <!-- 当出现错误时的提示信息 -->
                    <message>用户名必须非空</message>
                </field-validator>
            </field>
            
            <!-- 密码验证 -->
            <field name="user.password">
                <field-validator type="requiredstring">
                    <message>密码需非空</message>
                </field-validator>
                <!-- 4-12位字母或数字 -->
                <field-validator type="regex">
                    <!-- 注入正则表达式字符串 -->
                    <param name="regexExpression">^[a-zA-Z0-9]{4,12}$</param>
                    <message>密码需为4-12位字母或数字</message>
                </field-validator>
            </field>
        </validators>
        UserAction-validation.xml
        <field-validator type="requiredstring"></field-validator>

        中的type属性在下面的包中查看,

        一般直接使用type="regex",直接如上述例子所示使用param标签注入regexExpression即可

    4. 用xml配置方式对action的指定方法进行验证
      • 编写一个xml文件,名称: Action文件名-访问方法路径-validation.xml   (例如:UserAction-user_register-validation.xml


    模型驱动:

    请求数据封装第三种方式补充说明

    1. 表单: name                 ->            基本数据类型: String name
    2. 表单: user.name         ->            javabean数据类型: User user     (User:  String name)
    3. 表单: name                  ->           javabean数据类型: User user     (User:  String name) (使用模型驱动方式)这样可以前两种方式的优点,表单可以不用改变名字,后台又可以使用javaBean进行封装。

    模型驱动:

    action实现ModelDriven接口,后面泛型进行约束,只能封装同一个类型对象

    package c_modelDriver;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    /**
     * 使用模型驱动获得请求数据
     * 
     * @author claire
     * 
     */
    public class UserAction extends ActionSupport implements ModelDriven<User> {
    
        // 注意:使用模型驱动的方式,存放数据的模型引用不能为空,之后不需要user的set,get方法
        private User user = new User();
    
        /**
         * 该方法可以把值栈种的请求参数封装到User对象中
         */
        @Override
        public User getModel() {
            // TODO Auto-generated method stub
            return user;
        }
    
        public String register() throws Exception {
            System.out.println(user);
            return "success";
        }
    
    }
    UserAction.java
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>model</title>
    </style>
    </head>
    
    <body>
        <form
            action="${pageContext.request.contextPath}/model/user_register"
            method="post">
            
            <s:text name="user"></s:text>
            <input type="text" name="name">
            
            <s:text name="password"></s:text>
            <input type="password" name="password">
            
            <input type="submit" value='<s:text name="login"></s:text>'>
        </form>
    
    
    </body>
    </html>
    model.jsp
  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/clairexxx/p/10216212.html
Copyright © 2011-2022 走看看