天天看点

AndroMDA Getting started(六)

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.androm[email protected]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]
          

下面是我们看到的界面

继续阅读