默然说话

一个异想天开的人做着异想天开的梦

牟勇ID:mouyong
63864次访问,排名1578好友4人,关注者6
我快乐,我存在
mouyong的文章
原创 108 篇
翻译 4 篇
转载 30 篇
评论 12 篇
默然的公告
如果要联系我,希望能说明来意,谢谢.

点击这里给我发消息

Google

最近评论
peigen:又~~~~为什么是又呢???
dcopperfield:顶下
gaoyunpeng:无意中进入到这个博客,很快就被里面的内容所吸引,感觉很有意思,不知道为什么会有这样的感觉,或许只是一种直觉上的吸引吧,一直在看博客里的文章,觉得很不错,天天等更新,哈哈,终于看到新的文章啦~
我会一直关注的~
mouyong:谢谢你的鼓励,我会更加努力。
了祝愿你实现自己的理想,达成自己的目标
wsspy007:牟老师,我发现你是我见过最好的老师了,为学生考虑最多,一切为学生着想,不知道牟老师还记得我么,张伟(无名小辈肯定你是忘记了),第一期跟杨大宇他们在一个班的,补考两次都没有及格,我现在不在昆明了,在胜利油田,这里一切都很好,一个月的薪金能顶得上昆明3-5个月的薪水,但是我不喜欢这份工作,钱固然多,但是从学校出来步入社会以后才发现,我还是应该走软件开发这条路,现在每天我只睡4-6个小时,工作12……
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 struts2学习笔记(2)收藏

    新一篇: 精通Spring2.0读书笔记(1) | 旧一篇: Struts2学习笔记(1)

     
    第二讲:添加验证
    首先我们new一个JSP,这个页面我们称为login2.jsp。代码如下:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <s:form action="login">
                <s:textfield name="username" label="username" />
                <s:password name="password" label="password" />
                <s:submit label="submit" />
            </s:form>
        </body>
    </html>
    很明显,这个JSP我们使用了struts2定义的标签。
    <%@ taglib prefix="s" uri="/struts-tags" %>
    这一句是导入了struts2的标签,前缀规定为“s”
    另外,我们看到了struts2自定义的表单标签:
    <s:form action="login">
    我们看到,action属性赋给了login,而不是login.action。
    另外,我们也能看到几个表单控件的标签:
    <s:textfield name="username" label="username" />
    <s:password name="password" label="password" />
    <s:submit label="submit" />
    其中的name属性仍然是为控件命名,用于标识这个控件,而label属性则是为相应的控件生成相应的说明文字(如果看不太懂这句话,你可以抄完这段代码后运行它,然后仔细观察就可以知道了)。而且,struts2的标签还有一些格式化的功能,不过,个人认为这个功能作用并不大,因为现在的网页都是需要重写CSS的,这种功能仅仅提供了一个基本的对齐格式,并没有太大的意义。
    接下来,我们要修改LoginAction.java文件。代码如下:
    package com.speakmore.struts2test.action;
     
    import com.opensymphony.xwork2.ActionSupport;
     
    public class LoginAction extends ActionSupport {
     
        private String username;
        private String password;
     
        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;
        }
     
        @Override
        public String execute() throws Exception {
            if(this.getUsername().trim().equals("accp")&&this.getPassword().trim().equals("accp")){
                return "success";
            }else{
                this.addFieldError("username", "用户名或密码不正确");
                return "failer";
            }
        }
     
        @Override
        public void validate() {
            if(null==this.getUsername() || "".equals(this.getUsername().trim())){
                this.addFieldError("username", "username is required!");
            }
           
            if(null==this.getPassword()||"".equals(this.getPassword().trim())){
                this.addFieldError("password", "password is required!");
            }
        }
    }
    大家仔细看后就会发现,代码作了四处修改,首先是导入了一个包。
    import com.opensymphony.xwork2.ActionSupport;
    这个类在xwork-2.0.4.jar包中。ActionSupport对于很多通用的行为提供了一个默认的实现,特别是验证。它实现了绝大部分的验证。所以,第二个改动就是让我们的LoginAction继承了它。
    public class LoginAction extends ActionSupport {
    第三处改动是添加了一个validate()方法。
    @Override
        public void validate() {
            if(null==this.getUsername() || "".equals(this.getUsername().trim())){
                this.addFieldError("username", "username is required!");
            }
           
            if(null==this.getPassword()||"".equals(this.getPassword().trim())){
                this.addFieldError("password", "password is required!");
            }
        }
    这个方法的内容里有两个if语句,分别判断username和password是否为空,如果为空,则返回一个错误信息,有意思的是,它并没有使用return语句来进行错误信息的返回,而是使用了addFieldError()方法。
    this.addFieldError("password", "password is required!");
    addFieldError()方法有两个参数,第一个参数表示错误显示在哪个表单控件的上方,第二个参数表示错误信息,这里的意思是:把错误信息“password is required!”显示在login2.jsp里的<s:password name=”password”>这个控件的上方,这也是由struts2自定义控件来实现的。
    第四处改动就是execute()方法了。
    @Override
        public String execute() throws Exception {
            if(this.getUsername().trim().equals("accp")&&this.getPassword().trim().equals("accp")){
                return "success";
            }else{
                this.addFieldError("username", "用户名或密码不正确");
                return "failer";
            }
        }
    这里添加了一个if语句,判断用户名与密码是否都是accp,如果是,返回“success”,而不是则返回“failer”。也就是说,在我们的struts2.xml文件里也需要进行修改。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <package name="struts2" extends="struts-default">
            <action name="login" class="com.speakmore.struts2test.action.LoginAction">
                <result name="input">/login2.jsp</result>
                <result name="success">/result.jsp</result>
                <result name="failer">/login2.jsp</result>
            </action>
        </package>
    </struts>
    很明显可以看出来,这里添加了两个result标签:
    <result name="input">/login2.jsp</result>
    <result name="failer">/login2.jsp</result>
    name=input是说明当validate()方法调用出现验证失败时(即addFieldError()被调用时)返回的页面是login2.jsp。而name=failer则是对应于execute()方法中的return语句返回的字符串的。
    下面我们进行测试。
    这个程序我们首先运行的当然是login2.jsp页面,第一次测试我们什么也不填,直接点submit按钮时,服务器容器(这里是Tomcat)会根据struts2.xml文件里的action标记描述的信息,把login2.jsp页面的信息提交给LoginAction.class的一个实例,调用LoginAction的validate()方法来进行验证,我们什么也没填,addFieldError()方法将被调用,服务器容器(这里是Tomcat)会根据struts2.xml中的<result name=input>标记的指示,将页面转回login2.jsp页面来,并将错误消息显示于特定的控件上方(我们看到的结果就是username文本框上方出现“name is required”,password框上方出现“password is required”)。
    第二次测试,我们在用户名和密码框里都填上abc,当我们点submit按钮时,服务器容器仍然将信息提交给LoginAction,调用LoginAciton的validate()方法,这一次验证将通过(addFieldError()方法不被调用),当validate方法执行完毕之后,服务器容器接着调用LoginAction的execute()方法,进行用户名和密码的验证,当然,我们的用户名和密码输入的都不是accp,所以验证失败,execute()方法将返回“failer”,服务器容器根据<result name=”failer”>标记的指示,将页面转到login2.jsp,并将错误消息“用户名或密码不正确”也传给了login2.jsp,于是我们看到的结果就是login2.jsp页面的username文本框上方出现了“用户名或密码不正确”。
    第三次测试,我们在用户名和密码框里都填上accp,当我们点submit按钮时,服务器容器仍然将信息提交给LoginAction,首先调用LoginAction的validate()方法,验证通过,接着调用execute()方法,验证也通过,execute()方法将返回“success”,服务器容器根据<result name=”success”>标记的指示,将页面转到了result.jsp,于是我们看到了我们填入的用户名和密码:accp。
    至此,大功告成,我们的第一个struts2的应用就写完了。

     

    您好:
        当您在阅读和使用我所提供的各种内容的时候,我非常感谢,您的阅读已是对我最大的支持。
        我更希望您能给予我更多的支持。
        1.希望您帮助我宣传我的博客,让更多的人知道它,从中获益。
        2.希望您能多提出宝贵意见,包括我所提供的内容中的错误,建设性的意见,更希望获得哪些方面的帮助,您的经验之谈等等。
        3.更希望能得到您经济上的支持。
       
        我博客上面的内容均属于个人的经验,所有的内容均为开源内容,允许您用于任何非商业用途,并不以付费为前提,如果您觉得在阅读和使用我所提供的各种内容的过程中,您得到了帮助,并能在经济上给予我支持,我将感激不尽。
       
        您可以通过银行转帐付款给我(5元10元的,随意):
        招商银行一卡通:
        卡号:6225888712586894
        姓名:牟勇
       
        您也可以通过汇款的方式(5元10元的,随意):
        通讯地址:云南省昆明市女子(28)中学人民中路如意巷1号
        收信人:陈谦转牟勇收
        邮编:650021
       
        无论您给予我怎么样的支持,我都衷心的再次感谢。
        欢迎光临我的博客,欢迎宣传我的博客
        http://hi.csdn.net/mouyong
        http://blog.csdn.net/mouyong
        http://blog.sina.com.cn/mouyong
        EMail:mouyong@yeah.net

    发表于 @ 2008年02月15日 22:27:00|评论(loading...)|编辑

    新一篇: 精通Spring2.0读书笔记(1) | 旧一篇: Struts2学习笔记(1)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 默然