appfuse2代码生成

1.在hibernate.xml文件中引入实体

<mapping class="com.dongao.qa.demo.model.Teacher"/>

2.执行mvn –o package。生成相应的数据库表。
3.修改pom.xml,在 pom头部

<groupId>com.dongao.qa.demo</groupId>

这里定位到实体包的上一目录。
修改

<amp.genericCore>false</amp.genericCore>

4. 执行

mvn -o appfuse:gen -Dentity=Teacher
mvn -o appfuse:install -Dentity=Teacher

 

appfuse2之增加菜单

近来工作中要用到appfuse2,狂抓拉一通。总算有点小获。特此记录,以备忘记。 要增加一个菜单。首先在menu.jsp中增另一个menu

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

<menu:useMenuDisplayer name="Velocity" config="cssHorizontalMenu.vm" permissions="rolesAdapter">
<ul id="primary-nav" class="menuList">
    <li class="pad"> </li>
    <c:if test="${empty pageContext.request.remoteUser}"><li><a href="<c:url value="/login.jsp"/>" class="current"><fmt:message key="login.title"/></a></li></c:if>
    <menu:displayMenu name="MainMenu"/>
    <menu:displayMenu name="UserAreaMenu"/>
    <menu:displayMenu name="PeopleMenu"/>
    <menu:displayMenu name="UserMenu"/>
    <menu:displayMenu name="AdminMenu"/>
    <menu:displayMenu name="Logout"/>
</ul>
</menu:useMenuDisplayer>

然后在menu-config.xml中加入menu

<?xml version="1.0" encoding="UTF-8"?>
<MenuConfig>
    <Displayers>
        <Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
    </Displayers>
    <Menus>
        <Menu name="MainMenu" title="mainMenu.title" page="/mainMenu.html" 
roles="ROLE_ADMIN,ROLE_USER"/>
        <Menu name="UserMenu" title="menu.user" description="User Menu" 
page="/editProfile.html" roles="ROLE_ADMIN,ROLE_USER"/>
        <Menu name="PeopleMenu" title="menu.viewPeople" page="/persons.html" 
roles="ROLE_ADMIN,ROLE_USER"/>
        <Menu name="AdminMenu" title="menu.admin" description="Admin Menu" 
roles="ROLE_ADMIN" width="120" page="/users.html">
            <Item name="ViewUsers" title="menu.admin.users" page="/users.html"/>
            <Item name="ActiveUsers" title="mainMenu.activeUsers" 
page="/activeUsers.html"/>
            <Item name="ReloadContext" title="menu.admin.reload" page="/reload.html"/>
            <Item name="FileUpload" title="menu.selectFile" page="/uploadFile!start.html"/>
            <Item name="FlushCache" title="menu.flushCache" page="/flushCache.html"/>
            <Item name="Clickstream" title="menu.clickstream" page="/clickstreams.jsp"/>
        </Menu>
        <Menu name="UserAreaMenu" title="menu.userArea" 
description="UserArea Menu" 
roles="ROLE_USER" width="120" page="/mainMenu.html">
            <Item name="questionNavigator" title="menu.userArea.question" 
page="/questionNavigator.html"/>
            <Item name="ActiveUsers" title="menu.userArea.favorite" 
page="/activeUsers.html"/>
            <Item name="ReloadContext" title="menu.userArea.satisfy" 
page="/reload.html"/>
            <Item name="FileUpload" title="menu.userArea.error" 
page="/uploadFile!start.html"/>
            <Item name="FlushCache" title="menu.userArea.essence" 
page="/flushCache.html"/>

        </Menu>
        <Menu name="Logout" title="user.logout" page="/logout.jsp" 
roles="ROLE_ADMIN,ROLE_USER"/>
    </Menus>
</MenuConfig>

注意menu的name要一致。

<Item name="questionNavigator" title="menu.userArea.question" 
page="/questionNavigator.html"/>

这个要指向当点击菜单时跳转的的url
在struts.xml中有这个定义

<action name="questionNavigator" class="com.opensymphony.xwork2.ActionSupport">
            <result name="success">/WEB-INF/pages/userarea/ques_navigate.jsp</result> 
        </action>

为什么url要以html结属呢?

<constant name="struts.action.extension" value="html"/>

ques_navigate.jsp中

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

<head>
<title><fmt:message key="mainMenu.title" /></title>
<meta name="heading" content="<fmt:message key='mainMenu.heading'/>" />
<meta name="menu" content="MainMenu" />
</head>

<p><fmt:message key="mainMenu.message" /></p>

<div class="separator"></div>

<ul class="glassList">
    <li><a href="<c:url value='/editProfile.html'/>"><fmt:message
        key="menu.userArea.question.ask" /></a></li>
    <li><a href="<c:url value='/uploadFile!start.html'/>"><fmt:message
        key="menu.userArea.question.edit" /></a></li>
    <li><a href="<c:url value="/persons.html"/>"><fmt:message
        key="menu.userArea.question.search" /></a></li>
</ul>

最后看资源文件ApplicationResources_zh_CN.properties

# -- 用户专区 --
menu.userArea=问题专区
menu.userArea.question=问题
menu.userArea.favorite=收藏夹
menu.userArea.satisfy=满意度 
menu.userArea.error=查看勘误
menu.userArea.essence=精华区
menu.userArea.question.ask=提问
menu.userArea.question.edit=编辑
menu.userArea.question.search=搜索

这是jsp和配置文件中要读的中文。

appfuse2分析

进入http://localhost:8080/yourapp/
它会重定向

http://localhost:8080/yourapp/mainMenu.html

点击系统管理,指向url

http://localhost:8080/yourapp/users.html

它对应哪个jsp页面呢?
ctrl+h查 title

用户列表

这几个字,发现在资源文件中对应userList.title,再查userList.title
查到userList.jsp,
可知users.html重定向到userList.jsp,
随便更改一下title

mvn –o war:exploded

用maven发布一下.
果然title变化了。

appfuse2中maven的使用

进入你的appfuse2项目目录。
进入命令行,执行

mvn package

为项目打包,生成数据库表,打包成java项目。

mvn -Declipse.workspace=c:eclipseworkspace eclipse:add-maven-repo

给你的项目加上maven资源。

mvn eclipse:eclipse

生成eclipse工程文件

进入${tomcat_home}/conf/Catalina/localhost目录,添加一个context文件yourapp.xml。内容如下:

<Context path="/qas" 
docBase="D:/yourapp/qas/target/qas-1.0-SNAPSHOT" 
debug="0" privileged="true" reloadable="false" 
workDir="D:/yourapp/qas/target/qas-1.0-SNAPSHOT/tmp">
</Context>

如果只修改了jsp

mvn –o war:exploded

如果修改了类

mvn –o package –Dmaven.test.skip=true

如果修改了配置文件,资源文件等
需要将tomcat停掉,再执行

mvn –o package –Dmaven.test.skip=true

mvn -U surefire-report:report

mvn -o surefire-report:report

mvn surefire-report:report -e