zoukankan      html  css  js  c++  java
  • struts2学习笔记(2)——简单的输入验证以及标签库的运用

    struts2自带了一些标签库,运用好这些标签库会减少开发周期。 

    1.struts2标签库是在哪定义的? 

    struts2标签库定义在struts2-core-2.1.8.jar这个文件中,具体在这个jar的META-INF文件夹struts-tags.tld中。
     

    2.如何引用struts2标签库? 

    使用<%@ taglib prefix="s" uri="/struts-tags" %>可以引用,其中uri是在struts-tags.tld中指定的。 


    重构昨天的应用: 

    <s:form action="login"> 
        <s:textfield name="username" label="username"></s:textfield> 
        <s:password name="password" label="password"></s:password> 
        <s:submit label="submit"></s:submit> 
    </s:form> 


    其中注意的是form的action是login而不是html中的login.action,两者表示的意思一样。标签中的label属性值将显示在textfield前。 

    然后修改LoginAction类,让其继承ActionSupport类,以实现简单验证功能。昨天写的类是一个POJO,与struts2无关。而现在这个类的功能将更加强大。 

    override其方法validate,来实现验证功能。 

    内容: 

    if (null == this.getUsername() || "".equals(this.getUsername().trim())) { 
                this.addFieldError("username", "username required"); 
            } 
            if (null ==  this.getPassword()|| "".equals(this.getPassword().trim())) { 
                this.addFieldError("password", "password required"); 
            } 
    } 


    作用是来验证输入的内容是否为空(为什么不用JavaScript来验证???) 

    这里用到了一个小技巧,顺便提一下: 

    "".equals(this.getUsername().trim()) 


    把常量放在前面可以避免当this.getUsername()为空时抛出异常 

    this.addFieldError("username", "username required"); 


    可以在username上面显示出错信息(username required) 

    接着在struts2中指定信息没有输入完整时的处理方法,即在struts.xml中进行配置 

    <result name="input">/login2.jsp</result> 


    在validate方法中只做一些简单的验证,判断是否为空等,不会涉及业务逻辑。 


    程序流程: 

    在login.jsp中输入数据提交后,struts2拦截用户请求,然后发送请求到LoginAction处理请求,LoginAction调用validate方法进行验证。 

    若不通过,则交给struts2再次转发给login.jsp处理,并显示出相应的出错信息,由(this.addFieldError())方法指定。 

    若通过,则进行相应的set操作,结束后调用execute方法,返回相应的处理结果到struts2。 

    然后struts2根据返回的结果转发到相应的页面(result.jsp) 


    下次将介绍一下struts2的局部类型转换。

    原地址:http://blog.csdn.net/fanghao16/article/details/4710592

  • 相关阅读:
    MVC4数据访问EF查询linq语句的时候报错找不到表名问题
    以下各节已定义,但尚未为布局页“~/Views/Shared/_Layout.cshtml”呈现:“Scripts”。
    将函数实现放在头文件中
    const 不兼容的类型限定符问题
    Ubuntu 16.04重装后grub rescue> 终端模式修复方法
    Ubuntu 16.04 编译VTK7.1
    区域生长算法的一种C++实现
    Win7 U盘安装Ubuntu16.04 双系统
    Win7、Ubuntu双系统卸载Ubuntu系统
    AES加密补位填充的一个问题
  • 原文地址:https://www.cnblogs.com/yanff/p/3557969.html
Copyright © 2011-2022 走看看