添加校验和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 ,
你应该可以看到你添加的内容了: