AppFuse Tutorial 之 添加校验和Data List 表(ValidationAndList) (4)

添加校验和Data List 表(ValidationAndList)
 Validation:
    1).添加XDolclet tag 到 Person.java
  在(src/dao/**/model/Person.java),在get***()的上面添加XDoclet 标签 ,如getFirstName()和getLastName()
  @struts.validator type="required"

   2).运行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>
 3).在JSP文件中把下面这段JavaScript的注释去掉
  <html:javascript formName="personForm" cdata="false" dynamicJavascript="true" staticJavascript="false"/>
 <script type="text/javascript" src="<html:rewrite page="/scripts/validator.jsp"/>"></script>

检查和测试添加了校验的JSP 
  要web/pages/personForm.jsp有<html:form action="savePerson">,当我们保存窗体时,校验将会生效。
  运行ant db-load deploy,启动Tomcat,然后浏览http://localhost:8080/appfuse/editPerson.html?id=1
  
 
 
 
添加 Data List  Search()

 Data List 主要步骤:
 1).为 DAO和Manager Test添加testGetPeople方法
 2).为DAO和Manager添加getPeople()方法
 3).为Action Test 添加testSearch() 方法
 4).为Action添加search()方法
 5).创建personFormList.jsp
 
1).为 DAO和Manager Test添加testGetPeople方法
 打开test/dao/**/dao/PersonDAOTest.java然后添加testGetPeople方法:
 
 import java.util.List;
 public void testGetPeople() {
         person = new Person();
          List results = dao.getPeople(person);
         assertTrue(results.size() > 0);
    }
    
    打开 test/service/**/service/PersonManagerTest.java,然后添加 testGetPeople
    import java.util.List;
 public void testGetPeople() {
         List results = new ArrayList();
         person = new Person();
         results.add(person);
       
         //set expected behavior on dao
         personDAO.expects(once()).method("getPeople").will(
                returnValue(results));
         List people = personManager.getPeople(null);
         assertTrue(people.size() == 1);
         personDAO.verify();
     }
     
2).为DAO和Manager添加getPeople()方法
 为了使这些测试类能够被编译通过, 你需要为类PersonDAO和接口PersonManager
 添加getPeople()方法,然后实现它们。

 打开src/dao/**/dao/PersonDAO.java,然后添加getPeople()方法声明(method signature):
 1.public List getPeople(Person person);
 
 2.实现类中实现getPeople() 方法。
 打开 src/dao/**/dao/hibernate/PersonDAOHibernate.java,然后添加下面的方法:

     public List getPeople(Person person) {
         return getHibernateTemplate().find("from Person");
    }
  
  3.在src/service/**/impl/PersonManagerImpl.java 中实现getPeople() 方法:
     public List getPeople(Person person) {
         return dao.getPeople(person);
     }
 
3).为Action Test 添加testSearch() 方法
 打开test/web/**/action/PersonActionTest.java,然后添加如下方法:

 public void testSearch() {
         setRequestPathInfo("/editPerson");
         addRequestParameter("method", "Search");
         actionPerform();
 
         verifyForward("list");
 
         assertNotNull(getRequest().getAttribute(Constants.PERSON_LIST));
         verifyNoActionErrors();
     }

  这个时候会报错,在Constants.PERSON_LIST里面
  只有你在src/dao/**/Constants.java 文件中添加了PERSON_LIST变量后,这个类才能编译通过;
   public static final String PERSON_LIST = "personList";
     运行:
 ·   ant test-dao -Dtestcase=PersonDAO
 ·   ant test-service -Dtestcase=PersonManager
 
4).为Action添加search()方法
 为Action添加search()方法就很容易了。如果不作test的话就可以直接跳到这部,不过专家建议
 Driver Test 就是测试先行~~~,专家专家又见专家
 
 打开src/web/**/action/PersonAction.java,然后在文件顶部添加Xdoclet标签- 为list screen添加forward。
 * @struts.action-forward name="list" path="/WEB-INF/pages/PersonFormList.jsp"
 
 XDoclet这东西还真挺好用,配置一下就可以省略很多麻烦的人工配置了。在我们感受方便的同时,也谢谢XDoclet的
 作者写出这么一个实用的东东
 
  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. .
 BUILD SUCCESSFUL
 最近各地反日游行轰轰烈烈啊~~~~~~~~~~!
 

5).创建personFormList.jsp
 在目录web/pages下找到PersonFormList.jsp(PersonList.Jsp),打开
 将下面内容添加到metadata/web/global-forwards.xml,也是一个列表的视图。
 这样,它们就可以被包含到struts-config.xml文件中了。
 <forward name="editPerson" path="/editPerson.html"/>
        <forward name="viewPeople" path="/editPerson.html?method=Search"/>
       
        从PersonFormList.jsp文件中删除下面的内容。
 <display:column property="id" sort="true" headerClass="sortable"
        titleKey="personForm.id"/>
       
        <display:setProperty name="paging.banner.items_name" value="persons"/>
        更改为:
        <display:setProperty name="paging.banner.items_name" value="people"/>

 在web/WEB-INF/classes/ApplicationResources_en.properties 文件中添加title
 和heading的key (personList.title和personList.heading)。打开这个文件,然后添加下面的内容:
 # -- person list page --
 personList.title=Person List
 personList.heading=All People
 
 中文的那个资源文件也要添加:ApplicationResources_zh_CN.properties ,因为浏览器的内码可能认到
 是中文的。我这边就是一会英文,一会中文。搞不懂^_^!
 
 执行ant clean deploy 发布
 启动Tomcat,在Eclipse那里,的ant栏里面有个start.tomcat 点击它,然后点击上面的那个Green Button
 就可以启动Tomcat
 查看这个页面: http://localhost:8080/appfuse/editPerson.html?method=Search 。
 
 
 这样就已经有一个List Screen(Data),如果想添加或者删除了一个新Person后显示到LIST Date的那个页面。
 那么就需要修改PersonAction的那些save, delete和cancel方法中的forward了
 改变mapping.findForward("mainMenu")为mapping.findForward("viewPeople");

  PS:
     这个显示数据的页面没有用Struts的标签,是用了另外第三方控件,好像是display的那个。可以导出cvs,
     excel, pdf 但是不知能不能分页,没有用过这样的控件。有谁比较熟悉的能告知一下么?

为菜单(Menu)添加链接(Link)
 AppFuse的菜单好像是用了Struts menu
 对于这个list的最后一步: 使用户可以看到add, edit和delete功能。最简单的办法是在web/pages/mainMenu.jsp文件中
 添加一个链接的列表:

 NOTE: 不要使用mainMenu.jsp 中的其他的链接,这样可以保证JSP能够被其他的Web框架使用(如:Spring MVC、WebWork)。
 
    <li>
        <html:link forward="viewPeople">
            <fmt:message key="menu.viewPeople"/>
        </html:link>
    </li>
 

 在web/WEB-INF/classes/ApplicationResources_en.properties 中有一个条目: menu.viewPeople
 
 menu.viewPeople=View People
 
 另一种办法是:添加下面的内容到web/WEB-INF/menu-config.xml中:
 <Menu name="PeopleMenu" title="menu.viewPeople" forward="viewPeople"/>
 要保证<Menus> tag中有上面的XML代码,而不是在另一个<Menu>中。 然后添加这个心菜单到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,然后查看 http://localhost:8080/appfuse/mainMenu.html ,
 你应该可以看到你添加的内容了:

你可能感兴趣的:(DAO,list,search,action,Appfuse,menu)