[导入][AppFuse] AppFuse使用手记--DAO(七) [原]

    AppFuse生成的Action的提供了几个基本的CRUD方法。先看一下这几个方法的实现。
        
    Actioni通过Spring注入GenericManager,而GenericManager的实现GenericManagerImpl则调用GenericDao完成DAO操作。Appfuse默认为Hibernate进行DAO操作,GenericManagerImpl的实现类为GenericDaoHibernate,而GenericDaoHibernate里面还是调用的Spring的HibernateTemplate实现DAO操作。

    UML图如下(点击显示大图):
    dao

    通常AppFuse提供的几个操作是远远不够的,如果我们需要完成自定义的功能则需要自己实现相应的DAO操作。可以参考Appfuse的实现(参考Using Hibernate)。增加一个DAO类继承GenericDao,增加一个DAO实现类继承GenericDaoHibernate实现DAO类。

    UML图如下(点击显示大图):
    CompanyDao

    在applicationContext.xml里声明DAO。然后在Action通过注入DAO,完成相应的Action操作。

    相关试例代码的主要部分如下:
    CompanyDao
 1package com.reda.app.dao;
 2
 3import com.reda.app.model.Company;
 4import org.appfuse.dao.GenericDao;
 5
 6import java.util.List;
 7
 8public interface CompanyDao extends GenericDao<Company, Long> {
 9    public List find(Company company);
10}

11

    CompanyDaoHibernate:
 1package com.reda.app.dao.hibernate;
 2
 3import com.reda.app.model.Company;
 4import com.reda.app.dao.CompanyDao;
 5import org.appfuse.dao.hibernate.GenericDaoHibernate;
 6
 7import java.util.List;
 8
 9public class CompanyDaoHibernate extends GenericDaoHibernate<Company, Long> implements CompanyDao {
10
11    public CompanyDaoHibernate() {
12        super(Company.class);
13    }

14
15    public List find(Company company) {
16        return super.getHibernateTemplate().find("from Company where companyType=?", company.getCompanyType());
17    }

18
19}

    applicationContext.xml:
1    <!-- Add new DAOs here -->
2    <bean id="companyDao" class="com.reda.app.dao.hibernate.CompanyDaoHibernate">
3        <property name="sessionFactory" ref="sessionFactory"/>
4    </bean>

    struts.xml:
 1        <!--CompanyAction-START-->
 2        <action name="companies" class="com.reda.app.webapp.action.CompanyAction" method="list">
 3            <result>/WEB-INF/pages/companyList.jsp</result>
 4        </action>
 5
 6        <action name="editCompany" class="com.reda.app.webapp.action.CompanyAction" method="edit">
 7            <result>/WEB-INF/pages/companyForm.jsp</result>
 8            <result name="error">/WEB-INF/pages/companyList.jsp</result>
 9        </action>
10
11        <action name="saveCompany" class="com.reda.app.webapp.action.CompanyAction" method="save">
12            <result name="input">/WEB-INF/pages/companyForm.jsp</result>
13            <result name="cancel" type="redirect">companies.html</result>
14            <result name="delete" type="redirect">companies.html</result>
15            <result name="success" type="redirect">companies.html</result>
16        </action>
17
18
19        <action name="searchCompany" class="com.reda.app.webapp.action.CompanyAction" method="search">
20            <result name="input">/WEB-INF/pages/companyList.jsp</result>
21            <result>/WEB-INF/pages/companyList.jsp</result>
22        </action>        
23
24        <!--CompanyAction-END-->

    CompanyAction:
  1package com.reda.app.webapp.action;
  2
  3import com.opensymphony.xwork2.Preparable;
  4import com.reda.app.model.Company;
  5import com.reda.app.model.CompanyType;
  6import com.reda.app.dao.hibernate.CompanyDaoHibernate;
  7import org.appfuse.service.GenericManager;
  8import org.appfuse.webapp.action.BaseAction;
  9
 10import java.util.List;
 11
 12public class CompanyAction extends BaseAction implements Preparable {
 13    private GenericManager<Company, Long> companyManager;
 14    private GenericManager<CompanyType, Long> companyTypeManager;
 15    private List companies;
 16    private Company company;
 17    private Long companyId;
 18
 19    private CompanyDaoHibernate companyDao;
 20    
 21    public void setCompanyManager(GenericManager<Company, Long> companyManager) {
 22        this.companyManager = companyManager;
 23    }

 24
 25    public void setCompanyTypeManager(GenericManager<CompanyType, Long> companyTypeManager) {
 26        this.companyTypeManager = companyTypeManager;
 27    }

 28
 29    public List getCompanies() {
 30        return companies;
 31    }

 32
 33    public void setCompanyDao(CompanyDaoHibernate companyDao) {
 34        this.companyDao = companyDao;
 35    }

 36
 37    public String search() {
 38        companies = companyDao.find(company);
 39        return SUCCESS;
 40    }

 41
 42    public List getCompanyTypeList() {
 43        return companyTypeManager.getAll();
 44    }

 45
 46    /**
 47     * Grab the entity from the database before populating with request parameters
 48     */

 49    public void prepare() {
 50        if (getRequest().getMethod().equalsIgnoreCase("post")) {
 51            // prevent failures on new
 52            String companyId = getRequest().getParameter("company.companyId");
 53//            if (companyId != null && !companyId.equals("")) {
 54//                company = companyManager.get(new Long(companyId));
 55//            }
 56        }

 57    }

 58
 59    public String list() {
 60        companies = companyManager.getAll();
 61        return SUCCESS;
 62    }

 63
 64    public void setCompanyId(Long companyId) {
 65        this.companyId = companyId;
 66    }

 67
 68    public Company getCompany() {
 69        return company;
 70    }

 71
 72    public void setCompany(Company company) {
 73        this.company = company;
 74    }

 75
 76    public String delete() {
 77        companyManager.remove(company.getCompanyId());
 78        saveMessage(getText("company.deleted"));
 79
 80        return SUCCESS;
 81    }

 82
 83    public String edit() {
 84        if (companyId != null{
 85            company = companyManager.get(companyId);
 86        }
 else {
 87            company = new Company();
 88        }

 89
 90        return SUCCESS;
 91    }

 92
 93    public String save() throws Exception {
 94        if (cancel != null{
 95            return "cancel";
 96        }

 97
 98        if (delete != null{
 99            return delete();
100        }

101
102        boolean isNew = (company.getCompanyId() == null);
103
104        companyManager.save(company);
105
106        String key = (isNew) ? "company.added" : "company.updated";
107        saveMessage(getText(key));
108
109        if (!isNew) {
110            return INPUT;
111        }
 else {
112            return SUCCESS;
113        }

114    }

115}

    companyList.jsp
 1<%@ include file="/common/taglibs.jsp" %>
 2
 3<head>
 4    <title><fmt:message key="companyList.title"/></title>
 5    <meta name="heading" content="<fmt:message key='companyList.heading'/>"/>
 6    <meta name="menu" content="CompanyMenu"/>
 7</head>
 8
 9<s:form id="companyForm" action="searchCompany" method="post" validate="true">
10
11<li>
12    <s:checkbox key="company.status" cssClass="checkbox" theme="simple"/>
13    <s:label for="companyForm_company_status" value="%{getText('company.status')}" cssClass="choice desc" theme="simple"/>
14    <s:label for="companyForm_company_companyType" value="%{getText('company.companyType.typeName')}" cssClass="desc"/>
15    <s:select name="company.companyType.typeId" list="companyTypeList" listKey="typeId" listValue="typeName" ></s:select>
16    <s:textfield key="company.companyName" required="true" maxlength="200" cssClass="text medium"/>
17</li>
18    <li class="buttonBar bottom">
19        <s:submit cssClass="button" method="search" key="button.search" theme="simple"/>
20    </li>
21</s:form>
22
23
24<c:set var="buttons">
25    <input type="button" style="margin-right: 5px" class="button"
26           onclick="location.href='<c:url value="/editCompany.html"/>'"
27           value="<fmt:message key="button.add"/>"/>
28
29    <input type="button" class="button" onclick="location.href='<c:url value="/mainMenu.html"/>'"
30           value="<fmt:message key="button.done"/>"/>
31</c:set>
32
33<c:out value="${buttons}" escapeXml="false"/>
34
35
36<display:table name="companies" class="table" requestURI="" id="companyList" export="true" pagesize="25">
37    <display:column property="companyId" sortable="true" href="editCompany.html" media="html"
38                    paramId="companyId" paramProperty="companyId" titleKey="company.companyId"/>
39    <display:column property="companyId" media="csv excel xml pdf" titleKey="company.companyId"/>
40    <display:column sortProperty="status" sortable="true" titleKey="company.status">
41        <input type="checkbox" disabled="disabled" <c:if test="${companyList.status}">checked="checked"</c:if>/>
42    </display:column>
43
44    <display:column property="companyType.typeName" sortable="true" titleKey="companyType.typeName"/>
45    <display:column property="companyName" sortable="true" titleKey="company.companyName"/>
46
47    <display:setProperty name="paging.banner.item_name"><fmt:message key="companyList.company"/></display:setProperty>
48    <display:setProperty name="paging.banner.items_name"><fmt:message
49            key="companyList.companies"/></display:setProperty>
50
51    <display:setProperty name="export.excel.filename"><fmt:message key="companyList.title"/>.xls</display:setProperty>
52    <display:setProperty name="export.csv.filename"><fmt:message key="companyList.title"/>.csv</display:setProperty>
53    <display:setProperty name="export.pdf.filename"><fmt:message key="companyList.title"/>.pdf</display:setProperty>
54</display:table>
55
56<c:out value="${buttons}" escapeXml="false"/>
57
58<script type="text/javascript">
59    highlightTableRows("companyList");
60
</script>
61

文章来源: http://heyday.blogcn.com/diary,15384409.shtml

posted on 2008-05-04 20:57 不同樊响 阅读(670) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

常用链接

留言簿(2)

随笔档案(23)

搜索

最新评论

阅读排行榜

评论排行榜