appfuse1.6使用手册5

Posted on 2004-11-11 12:00  数码民工  阅读(2322)  评论(0编辑  收藏  举报

 

4、添加验证和列表页面

主要任务:

[1]添加验证标记到Person类中

[2]查看添加验证后的JSP页面,并且测试

[3]添加testGetPeople方法到DAOManager测试中

[4]添加testSerach方法到Action测试中

[5]Action中添加Serach方法

[6]创建personFormList.jsp页面

[7]在菜单中添加链接

 

Struts当中使用验证通常是将验证写到vaildtion.xml文件中,但是这样配置比较麻烦。我们现在使用XDoclet来自动生成这个验证配置文件。

Person对象当中需要验证的字段的GET方法前加入验证标签,如下:


    /**
     * @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


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

现在,你可以保存Person.java文件,然后运行 ant clean webdoclet命令来生成验证文件。

生成后的验证文件如下:


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

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

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

而在jsp文件中,你可以看到如下的客户端验证代码:

<html:javascript formName="personForm" cdata="false"
    dynamicJavascript="true" staticJavascript="false"/>
<script type="text/javascript" 
    src="<html:rewrite page="/scripts/validator.jsp"/>"></script>

如果你希望使用服务器端验证方法,那么可以将上面的代码删除掉。

使用客户端验证的效果:

使用服务器端验证的效果:

testGetPeople方法到PersonDAOPersonManager测试方法当中。

打开PersonDAOTest.java文件,加入以下代码:


    public void testGetPeople() {
        person = new Person();
        List results = dao.getPeople(person);
        assertTrue(results.size() > 0);
    }

打开PersonManagerTest.java文件,加入以下代码:


    public void testGetPeople() {
        List results = mgr.getPeople(new Person());
        assertTrue(results.size() > 0);
    }

 

现在需要在DAO当中实现这样的方法:


    public List getPeople(Person person);

 

PersonManager中实现这样的方法:


    public List getPeople(Person person) {
        return getHibernateTemplate().find("from Person");
    }

在这里你可以看到区别。如果直接使用Hibernate的话,那么实现这样的一个功能至少需要有以下的代码:


    Example example = Example.create(person)
                             .excludeZeroes()    // exclude zero valued properties
                             .ignoreCase();      // perform case insensitive string comparisons
    try {
        return getSession().createCriteria(Person.class)
                           .add(example)
                           .list();
    catch (Exception e) {
        throw new DataAccessException(e.getMessage());
    }
    return new ArrayList();

而现在代码的数量减少了很多。只有下面的一句就可以。


    public List getPeople(Person person) {
        return dao.getPeople(person);
    }

在完成上述操作之后,我们可以运行下面的语言来进行编译和测试:

*       ant test-dao -Dtestcase=PersonDAO

*       ant test-service -Dtestcase=PersonManager

 

添加testSerach方法到Action的测试类中。

打开personActionTest.java加入下列代码:


    public void testSearch() {
        setRequestPathInfo("/editPerson");
        addRequestParameter("method""Search");
        actionPerform();



        verifyForward("list");

        assertNotNull(getRequest().getAttribute(Constants.PERSON_LIST));
        verifyNoActionErrors();
    }

现在这个类还无法被编译,因为你没有将PERSON_LIST加入到Constants.java文件中。


    /**
     * The request scope attribute that holds the person list
     */
    public static final String PERSON_LIST = "personList";

下面在Action中加入Serach方法。


    public ActionForward search(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("Entering 'search' method");
        }

        PersonManager mgr = (PersonManager) getBean("personManager");
        List people = mgr.getPeople(null);
        request.setAttribute(Constants.PERSON_LIST, people);

        // return a forward to the person list definition
        return mapping.findForward("list");
    }

然后运行命令ant test-web -Dtestcase=PersonAction来进行测试。

 

建立列表页面。

将原来已经生成的PersonFormList.jsp拷贝到web/pages/目录下,修改其中的代码以便使其适合你的要求。

现在需要在metadata/web/global-forwards.xml文件中注册一个全局转向,以便能找到你的Action


        <forward name="editPerson" path="/editPerson.html"/>
        <forward name="viewPeople" path="/editPerson.html?action=Search"/>

 

完成以后,我们将这个功能加到菜单链接里面。

打开web/pages/mainMenu.jsp文件,加入下列代码:


    <li>
        <html:link forward="viewPeople">
            <fmt:message key="menu.viewPeople"/>
        </html:link>
    </li>

在上面代码中的menu.viewPeople是菜单项的名称,你需要在资源文件中加入这个名称的本地语言。

menu.viewPeople=查看人员

然后打开web/WEB-INF/menu-config.xml文件,加入这个菜单的配置。


<Menu name="PeopleMenu" title="menu.viewPeople" forward="viewPeople"/>

在页面上加入这个新的菜单。打开web/pages/menu.jsp


<%@ include file="/common/taglibs.jsp"%>

<div id="menu">
<menu:useMenuDisplayer name="ListMenu" permissions="rolesAdapter">
    <menu:displayMenu name="AdminMenu"/>
    <menu:displayMenu name="UserMenu"/>
    <menu:displayMenu name="PeopleMenu"/>
    <menu:displayMenu name="FileUpload"/>
    <menu:displayMenu name="FlushCache"/>
    <menu:displayMenu name="Clickstream"/>
</menu:useMenuDisplayer>
</div>

 

 

现在你可以通过运行ant clean deploy命令启动tomcat并且部署应用程序,这样你可以运行该程序。

4、添加验证和列表页面

主要任务:

[1]添加验证标记到Person类中

[2]查看添加验证后的JSP页面,并且测试

[3]添加testGetPeople方法到DAOManager测试中

[4]添加testSerach方法到Action测试中

[5]Action中添加Serach方法

[6]创建personFormList.jsp页面

[7]在菜单中添加链接

 

Struts当中使用验证通常是将验证写到vaildtion.xml文件中,但是这样配置比较麻烦。我们现在使用XDoclet来自动生成这个验证配置文件。

Person对象当中需要验证的字段的GET方法前加入验证标签,如下:


    /**
     * @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


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

现在,你可以保存Person.java文件,然后运行 ant clean webdoclet命令来生成验证文件。

生成后的验证文件如下:


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

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

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

而在jsp文件中,你可以看到如下的客户端验证代码:

<html:javascript formName="personForm" cdata="false"
    dynamicJavascript="true" staticJavascript="false"/>
<script type="text/javascript" 
    src="<html:rewrite page="/scripts/validator.jsp"/>"></script>

如果你希望使用服务器端验证方法,那么可以将上面的代码删除掉。

使用客户端验证的效果:

使用服务器端验证的效果:

testGetPeople方法到PersonDAOPersonManager测试方法当中。

打开PersonDAOTest.java文件,加入以下代码:


    public void testGetPeople() {
        person = new Person();
        List results = dao.getPeople(person);
        assertTrue(results.size() > 0);
    }

打开PersonManagerTest.java文件,加入以下代码:


    public void testGetPeople() {
        List results = mgr.getPeople(new Person());
        assertTrue(results.size() > 0);
    }

 

现在需要在DAO当中实现这样的方法:


    public List getPeople(Person person);

 

PersonManager中实现这样的方法:


    public List getPeople(Person person) {
        return getHibernateTemplate().find("from Person");
    }

在这里你可以看到区别。如果直接使用Hibernate的话,那么实现这样的一个功能至少需要有以下的代码:


    Example example = Example.create(person)
                             .excludeZeroes()    // exclude zero valued properties
                             .ignoreCase();      // perform case insensitive string comparisons
    try {
        return getSession().createCriteria(Person.class)
                           .add(example)
                           .list();
    catch (Exception e) {
        throw new DataAccessException(e.getMessage());
    }
    return new ArrayList();

而现在代码的数量减少了很多。只有下面的一句就可以。


    public List getPeople(Person person) {
        return dao.getPeople(person);
    }

在完成上述操作之后,我们可以运行下面的语言来进行编译和测试:

*       ant test-dao -Dtestcase=PersonDAO

*       ant test-service -Dtestcase=PersonManager

 

添加testSerach方法到Action的测试类中。

打开personActionTest.java加入下列代码:


    public void testSearch() {
        setRequestPathInfo("/editPerson");
        addRequestParameter("method""Search");
        actionPerform();



        verifyForward("list");

        assertNotNull(getRequest().getAttribute(Constants.PERSON_LIST));
        verifyNoActionErrors();
    }

现在这个类还无法被编译,因为你没有将PERSON_LIST加入到Constants.java文件中。


    /**
     * The request scope attribute that holds the person list
     */
    public static final String PERSON_LIST = "personList";

下面在Action中加入Serach方法。


    public ActionForward search(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("Entering 'search' method");
        }

        PersonManager mgr = (PersonManager) getBean("personManager");
        List people = mgr.getPeople(null);
        request.setAttribute(Constants.PERSON_LIST, people);

        // return a forward to the person list definition
        return mapping.findForward("list");
    }

然后运行命令ant test-web -Dtestcase=PersonAction来进行测试。

 

建立列表页面。

将原来已经生成的PersonFormList.jsp拷贝到web/pages/目录下,修改其中的代码以便使其适合你的要求。

现在需要在metadata/web/global-forwards.xml文件中注册一个全局转向,以便能找到你的Action


        <forward name="editPerson" path="/editPerson.html"/>
        <forward name="viewPeople" path="/editPerson.html?action=Search"/>

 

完成以后,我们将这个功能加到菜单链接里面。

打开web/pages/mainMenu.jsp文件,加入下列代码:


    <li>
        <html:link forward="viewPeople">
            <fmt:message key="menu.viewPeople"/>
        </html:link>
    </li>

在上面代码中的menu.viewPeople是菜单项的名称,你需要在资源文件中加入这个名称的本地语言。

menu.viewPeople=查看人员

然后打开web/WEB-INF/menu-config.xml文件,加入这个菜单的配置。


<Menu name="PeopleMenu" title="menu.viewPeople" forward="viewPeople"/>

在页面上加入这个新的菜单。打开web/pages/menu.jsp


<%@ include file="/common/taglibs.jsp"%>

<div id="menu">
<menu:useMenuDisplayer name="ListMenu" permissions="rolesAdapter">
    <menu:displayMenu name="AdminMenu"/>
    <menu:displayMenu name="UserMenu"/>
    <menu:displayMenu name="PeopleMenu"/>
    <menu:displayMenu name="FileUpload"/>
    <menu:displayMenu name="FlushCache"/>
    <menu:displayMenu name="Clickstream"/>
</menu:useMenuDisplayer>
</div>

 

 

现在你可以通过运行ant clean deploy命令启动tomcat并且部署应用程序,这样你可以运行该程序。

Copyright © 2024 数码民工
Powered by .NET 8.0 on Kubernetes