2010年11月18日 星期四

OpenSessionInViewFilter教學

如果沒有使用OpenSessionInViewFilter,Session會在transaction結束後關閉。
若有使用則會把一個Hibernate Session和一次完整的request過程對應的thread相綁定,使session在request的整個期間都可以使用。當View層邏輯完成後(如:在jsp用EL取關聯對象),才會通過Filter的doFilter方法自動關閉session。但是之後每一次request中的所有hibernate操作,都被當成同一個session並且被改成readOnly,所以將無法進行save,merge和delete的動作。這時就需要用transaction manager

2010年11月10日 星期三

struts optionsCollection 整合Spring用法

原因:有些下拉選單的內容是固定,分佈在不同頁面,若增加一個選項,要改很多頁面

解決方式:
1. 將選項內容記錄在DB,server啟動時,在AppListener讀取值

2. 用Spring將選項,直接注入struts提供的LabelValueBean,作法如下

 
  
   
   
  
  
   
   
  
 

在action中,直接將labelValueBeanList set到formbean中
註:一定要用LabelValueBean

在jsp頁面
 
  


或是

在action中,request.setAttribute("labelValueBeanList", labelValueBeanList);
註:可用自定的bean,不一定要用LabelValueBean

在jsp頁面

 

2010年11月9日 星期二

STRUTS 錯誤訊息集

Cannot find bean under name org.apache.struts.taglib.html.BEAN


  1. 在struts form tag 外使用strusts html tag
  2. property 必須和 submit 後,action對應的formbean中,有相同名稱的屬性,並且要有getter和setter

2010年11月5日 星期五

SSH回填至頁面

原因:
通常在做修改這個功能,需要將原有資料回填至欄位中

解決方式:
1. 在action中直接回傳To,jsp用EL回填
程式碼量:中
維護性:高
缺:若有關連的table,用EL取關連表的欄位,會有延遲加載(Lazy Load)的問題

2. 用ajax撈回資料,在用jquery填入欄位中
程式碼量:多
維護性:中
優:不用作form post
缺:要在action組字串、xml或JSON,再用jquery回填至個欄位

3. 在action中set ActionFrom,會自動回填
程式碼量:少
維護性:低

SSH延遲加載(Lazy Load)的問題

錯誤訊息:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session