วันอาทิตย์ที่ 18 มกราคม พ.ศ. 2558

JSF 2 - Managed Beans

Managed Beans คือ อะไร



               Managed Beans ก็คือ java bean ที่ JSF จะนำมาใช้เป็นคลาสกลางที่เอาไว้เชื่อมต่อกับหน้าเว็บ
ซึ่งค่าจากตัวแปรใน Managed Beans ที่นำมาใช้กับหน้าเว็บ ก็คือ properties หรือตัวแปรที่ประกาศเอาไว้ในคลาส โดยจะต้องมี getter และ setter method เพื่อให้สามารถเรียกใช้ตัวแปรเหล่านี้ผ่านทางหน้าเว็บได้

               ใน JSF 2 นี้ก่อนที่เราจะใช้งาน Managed Beans ได้เราจะต้องทำการตั้งค่าก่อน
โดยวิธีการที่เราจะทำได้นั้นมี 2 วิธี
1. ตั้งค่าผ่าน XML
2. ตั้งค่าโดยใช้ Annotation

ตัวอย่างการตั้งค่า



1. ตั้งค่าผ่าน XML

การตั้งค่าผ่าน XML นี้เราจะต้องไปตั้งค่าที่ไฟล์ที่ชื่อว่า faces-config.xml โดยตั้งค่าดังนี้
<managed-bean>
  <managed-bean-name>helloWorld</managed-bean-name>
  <managed-bean-class>com.learning.jsf2.HelloWorld</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean> 
<managed-bean-name>helloWorld</managed-bean-name>  บรรทัดนี้จะบอกว่าชื่อที่เราใช้อ้างอิงคลาสเพื่อเรียกใช้จากหน้าเว็บของเราจะใช้ชื่ออะไร ซึ่งเราไม่จำเป็นต้องตั้งให้เหมือนชื่อคลาสก็ได้  แต่เราควรจะตั้งให้เหมือนชื่อคลาสโดยใช้อักษรตัวแรกเป็นตัวพิมพ์เล็ก เพื่อให้ง่ายต่อการใช้งานในการค้นหา
<managed-bean-class>com.learning.jsf2.HelloWorld</managed-bean-class> บรรทัดนี้เอาไว้บอกที่อยู่ของคลาส Managed Bean ซึ่งจะประกาศแบบเต็มๆโดยขึ้นต้นด้วยชื่อ package ก่อนแล้วตามด้วยชื่อคลาส
<managed-bean-scope>request</managed-bean-scope>  บรรทัดนี้จะบอก scope ของ Managed Bean 


ซึ่งมีทั้งหมด 5 Scope ดังนี้ครับ

1. Application Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>application</managed-bean-scope>

managed bean ที่ทำการประกาศ Scope แบบ Application จะถูกสร้างครั้งแรกเมื่อมี HTTP request เข้ามาเกี่ยวกับ bean นั้นๆ และจะถูกทำลายเมื่อมีการ shut down Web Application


2. Session Scopeมีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>session</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ Session จะถูกสร้างขึ้นครั้งแรกเมื่อมี HTTP request ที่เกี่ยวข้องกับ bean นั้นๆใน Session และจะถูกทำลายเมื่อ session หมดเวลา หรือ session ถูกทำลาย หรือ session ไม่ถูกต้อง

3. Request Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>request</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ Request จะถูกสร้างขึ้นครั้งแรกเมื่อมี HTTP request ที่เกี่ยวข้องกับ bean นั้นๆ และจะถูกทำลายเมื่อ HTTP response ของ HTTP request ที่สร้าง bean นั้นๆ สิ้นสุดลง


4. View Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>view</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ View จะถูกสร้างขึ้นครั้งแรกเมื่อมี HTTP request ที่เกี่ยวข้องกับ bean นั้นๆ ซึ่งจะมีชีวิตอยู่ภายใน JSF ที่เป็น View เดียวกัน และจะถูกทำลายเมื่อเราใช้งาน View อื่นๆ


5. None Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>none</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ None จะถูกสร้างขึ้นครั้งแรกเมื่อมีการเรียกใช้ EL Expression เช่น #{helloBean.message} และจะถูกทำลายเมื่อการประมวลผล EL Expression สิ้นสุดลง




2. การตั้งค่าโดยการใช้ Annotation


เราสามารถประกาศ Scope ของ Managed Bean แบบ Annotation ได้โดยการประกาศ
@ชื่อScope ประกาศไว้ที่หัวของ Class เช่น

@SessionScoped
public class testSessionScoped {

}


ซึ่งการประกาศแบบ Annotation นี้จะมีวิธีการประกาศอยู่ 6 วิธีด้วยกัน

1. @ApplicationScoped
2. @SessionScoped
3. @RequestScoped
4. @ViewScoped
5. @NoneScoped
6. @CustomScoped

โดยการประกาศ 5 แบบแรกนั้นก็เหมือนที่ผมอธิบายเรื่องการประกาศแบบ xml เลยครับ
แต่จะมีแตกต่างที่ข้อ 6 ที่เป็น @CustomScoped ซึ่ง Bean ที่ประกาศโดยใช้ Scope แบบ Custom นี้จะมีชีวิตขึ้นอยู่กับ Custom map ที่เราได้ทำการ set เอาไว้



ไม่มีความคิดเห็น:

แสดงความคิดเห็น