现在的位置: 首页 > 综合 > 正文

兔八哥笔记34:AppFuse之添加校验和菜单

2013年08月31日 ⁄ 综合 ⁄ 共 2232字 ⁄ 字号 评论关闭

添加校验和菜单

本章将向你展示怎样为personForm添加校验逻辑,使得firstNamelastName在页面上变成必填field,并且添加一个屏幕列表来显示数据库中所有人的记录。

这部分内容依赖于Part III: 创建ActionJSP

关于本章

本章将向你展示怎样使用StrutsValidator 为你的PersonForm对象添加校验逻辑(客户端和服务器端)。我们也会使用Display Tag Library
创建一个屏幕列表来显示数据库中所有的people

内容

·   [1] Person.java 添加XDoclet Validator标签

·   [2] 检查和测试添加了校验的JSP

·   [3] DAOManager Test添加testGetPeople方法

·   [4] DAOManager添加getPeople()方法

·   [5] Action Test 添加testSearch() 方法

·   [6] Action添加search方法

·   [7] 创建personList.jspCanoo test

·   [8] 为菜单(Menu)添加链接(Link)

Person.java 添加XDoclet Validator标签

正常情况下,如果你想使用StrutsValidator,你必须用手写validation.xml文件。如果你不使用AppFuse 你也必须在ApplicationResources_en.properties文件中配置Validator Pluginerror key。如果你想获得更多的信息,请参见Validation Made Easy Tutorial

我们要感谢Xdoclet,它使得这一切都变得很简单你只需要为Person类添加几个@struts.validator标签。打开它 (src/dao/**/model/Person.java),然后修改getFirstName()getLastName() 方法的JavaDoc,使它们包含 @struts.validator type="required" 标签。

    /**
     * @struts.validator type="required"
     * @hibernate.property column="first_name" length="50"
     */
    public String getFirstName() {
        return this.firstName;
    }

    /**
     * @struts.validator type="required" 
     * @hibernate.property column="last_name" length="50"
     */
    public String getLastName() {
        return this.lastName;
    }

你还可以在这个标签里添加一个msgkey属性( attribute),它用来覆盖错误的默认消息的key

@struts.validator type="required" msgkey="errors.required"

type="required"的默认的Key已经是errors.required了,所以我经常保留它做为默认值。这个key被定义在web/WEB-INF/classes/ApplicationResources_*.properties中。 你也许注意到:虽然XDoclet的文档说应该把这些标签放在Setter部分,但我们放到了getter部分,这是因为模板文件(metadata/template/struts_form.xdt) 会将这些标签放在产生的PersonForm.javaSetter部分。

现在如果你保存Person.java,然后运行ant clean webdoclet,将会在目录build/你的项目名称/WEB-INF/下产生一个validation.xml文件. 它应该有一个为"personForm"使用的入口:

      <form name="personForm">
              <field property="firstName"
                     depends="required">

                  <arg0 key="personForm.firstName"/>
              </field>
              <field property="lastName"
                     depends="required">

                  <arg0 key="personForm.lastName"/>
              </field>
      </form>

在我们的PersonForm.jsp中可以使用客户端校验,我们在PersonForm.jsp文件的底部添加一个<html:javascript>标签和一些脚本。下面的内容是已经存在的(感谢viewgen) – 你只需要将它们从注释中放开,它们被注释的原因是:如果指定了一个Form的名字并且校验规则不存在,Validator将会抛出一个异常。

我个人认为这是一个 a bug

抱歉!评论已关闭.