13.标准搜索面板
我们最后准备对界面动手!在这章中,我们要使用AndroMDA BPM4Struts cartridge开发一个基于struts的web前端。注意,AndroMDA提供了另外一种catridge生成基于JSF的前端。然而,如果你更喜欢一些其他的前端框架,你可以写你自己的catridge!但是记住要和社区分享啊J。
BPM4Struts从你的应用定义流的的UML模型生成struts web页面。在我们开始应用建模之前,请阅读下面的BPM4Struts catridge的重要内容。
1. Introduction to BPM4Struts: The Introduction and Goal sections provide a good overview of the cartridge.
2. BPM4Struts How-to Guide: Quickly look over the concepts behind use-cases, activity graphs and controllers.
有三个重要的概念与创建网页相关:use case,活动图(用例的描述),一个或多个控制器(他们的方法能够从活动图调用)。让我们讨论一下我们如何建模我们的搜索界面。我们开始一个用例,叫做Timecard,这个用例被标注了两个sterotype:
1. FrontEndUseCase:他的名字精确的表明了-他是一个前端的用例。
2. FrontEndApplication:表明了应用的访问点,注意,现在我们不用考虑安全或者导航-只是你一登录浏览器就显示timecard页面。
接下来,我们增加这个用例的活动图。活动图如下面显示的样子。
活动图使用下面显示的SearchController调用方法,通过SearchController的关键的参数是通过http访问提供的表单接口。SearchController能够调用在服务层的服务。下面表示的是对实体的访问。
现在让我们开始我们的模型用例,活动图和controller。
- ArgoUML (under construction)
- MagicDraw 9.x
- MagicDraw 11.5
- RSM 6
现在,让我们要求AndroMDA为Search Timecards页面生成代码。
1. 在命令提示符窗口执行命令mvn install。确信你看到了build successful的信息。
2. 只有调用服务的SearchController代码需要写,因此打开SearchControllerImpl类,在C:/timetracker/web/src/main/java/org/andromda/timetracker/web/timecardsearch
,增加下面显示的代码。
// license-header java merge-point
package org.andromda.timetracker.web.timecardsearch;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.andromda.timetracker.vo.UserVO;
import org.andromda.timetracker.vo.UserVOComparator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionMapping;
public class SearchControllerImpl extends SearchController
{
private Log logger = LogFactory.getLog(SearchControllerImpl.class);
private static final String ALL_STRING = "-- All --";
public final void populateSearchScreen(
ActionMapping mapping,
org.andromda.timetracker.web.timecardsearch.PopulateSearchScreenForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
if (logger.isDebugEnabled()) {
logger.debug("form: " + form);
}
// Get list of users and add the "All" option at the top
UserVO[] users = getUserService().getAllUsers();
Arrays.sort(users, new UserVOComparator());
List userList = new ArrayList(Arrays.asList(users));
userList.add(0, new UserVO(null, ALL_STRING, null, null));
// Populate submitter and approver dropdowns
form.setSubmitterBackingList(userList, "id", "username");
form.setApproverBackingList(userList, "id", "username");
}
}
现在,我们排序 users数组,以便能按照字母顺序出现在drop-down列表前。排序功能使用UserVOComparator,在C:/timetracker-completed/common/src/main/java/org/andromda/timetracker/vo
。
拷贝他到你的相同的目录结构中。
现在,下面的步骤部署应用到JBoss中,并且测试:
1. 构建common和web项目确认上面增加的代码已经编译并且打包了。
Mvn –f common/pom.xml install
Mvn –f web/pom.xml install
2.
启动JBoss服务。打开命令提示符窗口,切换目录到C:/jboss-
4.0.4
/bin
执行命令run。
3.
部署应用到JBoss上。打开早先的命令提示符窗口(C:/timetracker)执行下面的命令
Mvn –f app/pom.xml –Ddeploy
察看JBoss应用控制台的信息,指出应用启动成功。
4.
打开浏览器,指向http://localhost:8080/timetracker。timetracker搜索页面会出现。尽管界面外观不是我们想要的原型,但是屏幕的功能是正确的。我们以后再考虑界面的外观,当我们所有的功能都完成后。
5.
确认提交和审批下拉列表能弹出所有的人员列表。
6.
在搜索条件中设置一些值点击搜索按钮。C:/jboss-
4.0.4
/server/default/log/server.log,这个日志里面会有下面的记录。
2006-06-29 02:47:41,541 DEBUG form:
org.andromda.timetracker.web.timecardsearch.SearchTimecardsSearchFormImpl@a2bd15
[startDateMinimum=Tue Jun 13 00:00:00 EDT 2006,
startDateMaximum=Wed Jun 07 00:00:00 EDT 2006,
submitter=3,
status=<null>,
approver=2]
下面是我们看到的界面