[導(dǎo)入][AppFuse] AppFuse使用手記--一對多(六) [原]

              先說明一下,單表關(guān)系A(chǔ)ppFuse默認(rèn)生成的代碼沒問題的,CRUD和界面顯示都非常正確,簡直可以直接發(fā)布。一對多還有些小小的問題,需要手工實現(xiàn)部分代碼。

              1。先參考 [AppFuse] AppFuse使用手記--試?yán)ǘ?[原] 生成POJO和其它源文件。

              2。修改web.xml,打開lazyLoadingFilter配置,AppFuse原本是支持的,只是默認(rèn)注釋調(diào)了,如果沒有打開,會報如下錯誤:
              org.hibernate.LazyInitializationException: could not initialize proxy - no Session
               at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
               at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
               at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)

              3。界面顯示顯示列表時,一對多的列默認(rèn)是不顯示的,我們需要手工增加display部分。
          1<display:column property="companyType.typeName" sortable="true" titleKey="companyType.typeName"/>
           
              4。新增和修改時,頁面會出現(xiàn)錯誤,顯示不出來,看看JSP頁面,AppFuse也要求我們手工修改:
          1<!-- todo: change this to read the identifier field from the other pojo -->
          2<s:select name="company.companyType.typeId" list="companyTypeList" listKey="typeId" listValue="typeName" ></s:select>

              錯誤原因主要是因為需要companyTypeList不存在,我們可在Action里實現(xiàn)getCompanyTypeList方法。
           1    public class CompanyAction extends BaseAction implements Preparable {
           2        private GenericManager<Company, Long> companyManager;
           3        private GenericManager<CompanyType, Long> companyTypeManager;
           4        private List companies;
           5        private Company company;
           6        private Long companyId;
           7        
           8        public void setCompanyManager(GenericManager<Company, Long> companyManager) {
           9            this.companyManager = companyManager;
          10        }

          11        
          12        public void setCompanyTypeManager(GenericManager<CompanyType, Long> companyTypeManager) {
          13            this.companyTypeManager = companyTypeManager;
          14        }
              
          15        
          16        public List getCompanies() {
          17            return companies;
          18        }

          19        
          20        public List getCompanyTypeList() {
          21            return companyTypeManager.getAll();
          22        }

          23        
          24              
          25    }
              這樣頁面就可以顯示對應(yīng)的下拉列表了。

              5。CRUD中,當(dāng)Update一對多一列時,會出現(xiàn)錯誤:
              identifier of an instance of com.reda.app.model.CompanyType was altered from 11 to 1; nested exception is org.hibernate.HibernateException: identifier of an instance of com.reda.app.model.CompanyType was altered from 11 to 1
             
              在網(wǎng)上找了找,錯誤的原因主要是因為Action在開始時,會持久化對象,在組裝數(shù)據(jù)時,會用新數(shù)據(jù)替換舊數(shù)據(jù),如果被替換的是持久化對象,在替換子對象關(guān)系時,會檢查到子對象的Id被強(qiáng)制修改的錯誤,而持久化對象的Id值是不能被更改的。
             
              debug時,發(fā)現(xiàn)在Update時,會調(diào)用prepare先持久化,注釋調(diào)這部分,就可以了。
           1    /**
           2     * Grab the entity from the database before populating with request parameters
           3     */
              
           4    public void prepare() {
           5        if (getRequest().getMethod().equalsIgnoreCase("post")) {
           6            // prevent failures on new
           7            String companyId = getRequest().getParameter("company.companyId");
           8//            if (companyId != null && !companyId.equals("")) {
           9//                company = companyManager.get(new Long(companyId));
          10//            }
          11        }

          12    }

          文章來源: http://heyday.blogcn.com/diary,15301923.shtml

          posted on 2008-05-04 20:57 不同樊響 閱讀(727) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

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

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆檔案(23)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安丘市| 元朗区| 蒲江县| 乌鲁木齐市| 兴山县| 永兴县| 平阴县| 黎城县| 银川市| 满洲里市| 怀集县| 工布江达县| 利川市| 江源县| 宜兰市| 霍林郭勒市| 航空| 关岭| 依安县| 乐昌市| 五指山市| 河东区| 二手房| 新竹市| 菏泽市| 荔浦县| 新津县| 萍乡市| 嫩江县| 雷山县| 晋中市| 且末县| 通辽市| 营山县| 红原县| 峨眉山市| 壶关县| 洛隆县| 河源市| 泸水县| 顺义区|