Project

 ประกาศ bean โดยใชคลาส ResourceBundleMessageSource

 

 

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>
 

เพิ่ม taglib ไว้ที่ header

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

 จากเขียนค่าที่ต้องการนำมาแสดง

<spring:message code="xxx"/>

สำหรับข้อตกลงในการเขียนโปรแกรม มีดังนี้นะครับ

standard code

·       การตั้งชื่อ package   

                com.ais.itmas.modulename

                com.ais.itmas.modulename.spring.hibernate.persistance

                com.ais.itmas.modulename.spring.hibernate.persistance.dao                                com.ais.itmas.modulename.spring.hibernate.persistance.iface

com.ais.itmas.modulename.spring.hibernate.persistance.service

 

·       file config WEB-IMF ให้ใช้ร่วมกัน แต่ comment ของแต่ละคนไว้ใน block comment ของตัวเอง

< !- - Start sansal45 -->

Config

< !- - End sansal45 -->

·       comment ที่ method ด้วยว่า method สำหรับทำอะไร สำหรับ eclipse เลื่อน cursor ไปที่ method จากนั้นกด shift + alt + j มันจะสร้าง java doc ให้ จากนั้นก็เขียนคำอธิบายไว้ที่ข้างบนบรรทัดแรก  

·       สร้าง jsp ใน folder pages > ชื่อแต่ละ node เช่น node workflow จะสร้าง jsp ใน pages > workflow

 

framework & Structure

Font End

1.       JQuery validator

2.       Dialog => Extjs + Jtip

3.       JMesa

4.       Controller spring sent ajax by JQuery

5.       DWR ใช้กับ combo box (load component ที่ไม่สามารถ load เข้า cache และเป็น component ที่มีความเกี่ยวเนื่องกัน เช่น จังหวัดกับอำเภอ)

6.       แสดงข้อมูล edit ให้ไป query ข้อมูลใน controller ใส่ใน model แล้วใช้ $ แสดงใน jsp

7.       value ของ button จะจัดเก็บไว้ใน properties file (ยังไม่สรุปการเรียกใช้)

Back End

1.       มี persistence, DAO, VO, Service โดยที่ให้ persistence เป็นตัว map กับ xml ของ hibernate ที่ config กับ database และใช้ VO สำหรับเรียกแสดงผลหลักการตั้งชื่อ เช่น

-          table ชื่อ USER_DETAIL

-          persistence = UserDetail

-          DAO = UserDetailDAO

-          VO = UserDetailVO

-          Service = UserDetailService

แต่ในกรณีที่มีการ join กันของ database ให้สร้าง class ด้วย SP+ชื่อscreen เช่น

-          หน้า Screen ชื่อ IM_DETAIL เป็นการ join  ของ USER_DETAIL USER_FUNCTION

-          VO = SPImDetailVO

-          DAO = SPImDetailDAO

-          Service = SPImDetailService

 

2.       ถ้า VO extends bean เวลาส่งค่ามาให้ cast bean เป็น VO เช่น

UserDetailVO userDetailVO = (UserDetailVO)  userDetail;

3.       ใช้ Hibernate ทั้งหมด กรณีมีการ join หลาย table ให้ใช้ JDBC ใน hibernate callback แต่ต้อง ปิด/เปิด connection เอง

4.       มี param ไว้ส่งค่าให้กับ tableFactory ของ JMesa

* BeanUtil.copypropery ใช้ในกรณี copy ข้อมูลจาก bean ใส่ VO (ชื่อ property name เหมือนกัน)

 

Error มี 3 ส่วน

-          font จะใช้ JQuery extjs ใช้วิธี include page โดยไม่ต้อง เก็บใน base

-          ส่วน action ให้ไปอ่าน error code

-          error ที่จับไม่ได้ ให้เป็น error page ไป

 

- Error code ที่จะแสดงให้แสดงที่ส่วนบนของ page โดยใช้ JQuery

- รองรับ error ภาษาไทยด้วย

- แยก js ของแต่ละหน้า ในกรณีปกติ แต่ถ้าหากมีปัญหาเรื่องภาษาไทยให้ใช้วิธีการ include jsp ที่เขียนเฉพาะ js ไว้เข้ามา (encodeURIComponent ใช้ใน JMesa)

- SA จะระบุให้ใน spec ว่าแต่ละ page มีรายละเอียดอย่างไร ปุ่มที่ disable, dialog , process bar

 

Form การ forward

ให้เข้า controller ทุกตัวไม่ใช้ dwr

1.       ใช้ Ajax form (เรียก controller โดยไม่ต้อง refresh หน้า)

2.       ส่วนที่แสดง JMesa ให้ เรียกที่ controller ปกติ

จาก main page (business) ส่งค่าให้ node ย่อยๆ โดยส่งเป็น url ใน dwr ข้ามไปเลย

 

** ใ นแต่ละ method ให้ทำการ set ค่า ทุกๆ object ที่ไม่ใช้แล้วให้เป็น null ด้วยซึ่งจะครอบด้วย try{}catch()
แ ละ finally

เ ช่น

    try{

StringBuilder sb = new StringBuilder(50);

.... 

} catch(RuntimeException re){

} finaly{

sb = null; 

 

การติดต่อกับ Datatase

จะใช้ Hibernate เป็นหลักและเราจะใช้ Hibernate Synchronizer ในการ generate ไฟล์และ generate คลาส 
แต่มีสุดที่่สำคัญอยู่อย่างหนึ่งคือ field ที่มี data type เ ป็น date ปกติแล้ว Hibernate Synchronizer จะ generate โดยใช้ java.util.Date ให้ทำการเปลี่ยนเป็น java.util.Calendar แทน

และที่สำคัญอีกก็คือ เราจะใช้ Hibernate ควบคู่กับ Jdbc โดยผ่าน HibernateCallback ของ Spring เพื่อทำการเขียน query ที่มีความซับซ้อนมากๆ เพื่อความสะดวกในการใช้งาน

ตัวอย่าง การใช้ callback เพื่อเขียน hibernate ตรงๆ

getHibernateTemplate().executeFind(new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {

Criteria criteria = session.createCriteria(getReferenceClass());

return criteria.list();

}

});