s2sh整合<四>

quguiliang 13年前發布 | 3K 次閱讀 Evince

這里我們需要使用spring的ioc將DAO諸如到service中,所以不要忘記在service實現類中加入DAO作為屬性。
PersonServiceImpl.java

  1. package test.s2sh.service.impl;   
  2.   
  3. import java.util.List;   
  4.   
  5. import test.s2sh.bean.Person;   
  6. import test.s2sh.dao.PersonDAO;   
  7. import test.s2sh.service.PersonService;   
  8.   
  9. public class PersonServiceImpl implements PersonService {   
  10.     private PersonDAO personDAO;   
  11.     public void delete(Person p) {   
  12.         this.personDAO.removePerson(p);   
  13.     }   
  14.   
  15.     public List<Person> findAll() {   
  16.         return this.personDAO.findAllPersons();   
  17.     }   
  18.   
  19.     public Person findById(Integer id) {   
  20.         return this.personDAO.findPersonById(id);   
  21.     }   
  22.   
  23.     public void save(Person p) {   
  24.         this.personDAO.savePerson(p);   
  25.     }   
  26.   
  27.     public void update(Person p) {   
  28.         this.personDAO.updatePerson(p);   
  29.     }   
  30.   
  31.     public PersonDAO getPersonDAO() {   
  32.         return personDAO;   
  33.     }   
  34.   
  35.     public void setPersonDAO(PersonDAO personDAO) {   
  36.         this.personDAO = personDAO;   
  37.     }   
  38.   
  39. }  
  40. </OL>


    (6)接下來我們開始對action層進行設置,實際項目中的action可能會有很多,所以我們這里需要對action進行分包,因為我們這里針對Person進行操作,所以我們創建test.s2sh.action.person.
    這里先做保存操作
    SavePersonAction.java

    <OL class=dp-j>

  41. package test.s2sh.action.person;   
  42.   
  43. import test.s2sh.bean.Person;   
  44. import test.s2sh.service.PersonService;   
  45.   
  46. import com.opensymphony.xwork2.ActionSupport;   
  47.   
  48. public class SavePersonAction extends ActionSupport {   
  49.     private Person p;   
  50.     private PersonService service;   
  51.     public Person getP() {   
  52.         return p;   
  53.     }   
  54.     public void setP(Person p) {   
  55.         this.p = p;   
  56.     }   
  57.     public PersonService getService() {   
  58.         return service;   
  59.     }   
  60.     public void setService(PersonService service) {   
  61.         this.service = service;   
  62.     }   
  63.        
  64.     public String execute() throws Exception {   
  65.         this.service.save(p);   
  66.         return this.SUCCESS;   
  67.     }   
  68.        
  69.     public void validate() {   
  70.         if(p.getName()==null||"".equals(p.getName())){   
  71.             this.addFieldError("p.name""name is not null");   
  72.         }   
  73.     }   
  74.        
  75. }  
  76. </OL>


    下面創建一個保存人員的提交頁面
    save.jsp

    <OL class=dp-j>

  77. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>   
  78. <%@ taglib prefix="s" uri="/struts-tags" %>   
  79.   
  80. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  81. <html>   
  82.   <head>   
  83.        
  84.     <title>Save Person</title>   
  85.   
  86.   </head>   
  87.      
  88.   <body>   
  89.     <s:form action="savePerson">   
  90.         <s:textfield name="p.name" label="name"></s:textfield>   
  91.         <s:textfield name="p.age" label="age"></s:textfield>   
  92.         <s:submit></s:submit>   
  93.     </s:form>   
  94.   </body>   
  95. </html>  
  96. </OL>

    操作成功頁面
    save-success.jsp

    <OL class=dp-j>

  97. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>   
  98.   
  99. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  100. <html>   
  101.   <head>   
  102.     <title>Save OK</title>   
  103.   </head>   
  104.      
  105.   <body>   
  106.     保存成功 <br>   
  107.   </body>   
  108. </html>  
  109. </OL>

    接下來我們需要配置struts.xml,創建action

    <OL class=dp-xml>

  110. <action name="savePerson" class="savePersonAction">  
  111.     <result name="success" type="redirect">/save-success.jsp</result>  
  112.     <result name="input">/save.jsp</result>  
  113. </action>  
  114. </OL>

    由于現在的action的創建已經由spring所接管,所以這里class里面使用的是別名,該別名與applicationContext.xml中的id對應.

    接下來我們需要配置applicationContext的ioc。

    1. <bean id="personDAO" class="test.s2sh.dao.impl.PersonDAOImpl" scope="singleton">  
    2.     <!-- 由于該類是繼承于HibernateDaoSupport,所以需要將sessionFactory注入 -->  
    3.     <property name="sessionFactory" >  
    4.         <ref bean="sessionFactory"/>  
    5.     </property>  
    6. </bean>  
    7. <bean id="personService" class="test.s2sh.service.impl.PersonServiceImpl">  
    8.     <property name="personDAO" ref="personDAO"></property>  
    9. </bean>  
    10. <bean id="savePersonAction" class="test.s2sh.action.person.SavePersonAction" scope="prototype">  
    11.     <property name="service" ref="personService"></property>  
    12. </bean> 
    13. </OL>

      這里說明一下spring中的單例與設計模式中的單例不同,設計模式的單例是在jvm中只產生一個實例,而spring中的單例
      是針對每個ioc容器來言,如果存在兩個ioc容器,那么每個ioc容器都會生成唯一的類實例
      將sessionFactory注入Dao中,這里的Dao來說是無狀態的,可以設置為單例singleton。這里的action是使用spring創建的。
      struts2與struts1的action有所不同,因為struts2中的action中可能存在屬性,這里是Person,所以struts2的action可能是有狀態的。
      如果是有狀態的我們就需要將scope設置成原型模式,即每次請求都新建一個action。
      不然可能會出現如果表單提交的第一次出錯,之后就再也提交不過去了,值就是應為使用默認的singleton,
      當第一次的時候就將FieldError中加入了錯誤,每次都是這個action,始終帶著這個錯誤,所以就提交不過去了。

      到目前為止這個整合已經完成了。

      </SPAN></SPAN></SPAN></SPAN>

 本文由用戶 quguiliang 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!