[導入][AppFuse] AppFuse使用手記--DAO(七) [原]

              AppFuse生成的Action的提供了幾個基本的CRUD方法。先看一下這幾個方法的實現(xiàn)。
                  
              Actioni通過Spring注入GenericManager,而GenericManager的實現(xiàn)GenericManagerImpl則調用GenericDao完成DAO操作。Appfuse默認為Hibernate進行DAO操作,GenericManagerImpl的實現(xiàn)類為GenericDaoHibernate,而GenericDaoHibernate里面還是調用的Spring的HibernateTemplate實現(xiàn)DAO操作。

              UML圖如下(點擊顯示大圖):
              dao

              通常AppFuse提供的幾個操作是遠遠不夠的,如果我們需要完成自定義的功能則需要自己實現(xiàn)相應的DAO操作。可以參考Appfuse的實現(xiàn)(參考Using Hibernate)。增加一個DAO類繼承GenericDao,增加一個DAO實現(xiàn)類繼承GenericDaoHibernate實現(xiàn)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 不同樊響 閱讀(683) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          導航

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

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆檔案(23)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长兴县| 桃园县| 盐津县| 邹城市| 大同市| 沛县| 博湖县| 甘谷县| 湖口县| 大英县| 永善县| 卢龙县| 仙游县| 蓝田县| 普宁市| 漳平市| 辉南县| 山东| 白水县| 信阳市| 翼城县| 镇坪县| 齐河县| 清徐县| 万宁市| 长丰县| 巧家县| 肃宁县| 阆中市| 黔东| 虹口区| 石门县| 蓝田县| 曲周县| 泗洪县| 颍上县| 浦城县| 高青县| 福建省| 重庆市| 雅江县|