มาแล้วตอนต่อของ JSF 2.0 ก่อนหน้านี้พอดีมีคนมาถามเรือง Session ในทวิตเตอร์ครับ ก็ขอโทษทีช้านะครับ อาจจะช้าๆกันสักนิดนะครับ ผมเผาเนื้อหาให้ไม่ทันค้าบบบ JSF ไ่ม่ใช่น้อยๆนะ ได้บ่นก่อนเขียนแล้วก็มาดูกันต่อดีกว่า ก่อนหน้านี้เราก็ได้เห็น Expression Language หรือ #{helloManagedBean.name} พวกนี้แทรกๆอยู่ตามหน้า xhtml ต่างๆของเรานะครับ ทีนี้แหละเราจะมาดูส่วนนี้แบบละเอียดๆ กันครับว่าเราจะใช้ EL ได้ในรูปแบบใดๆบ้างนะครับ
1. เราจะใช้มันในการ set/get data ระหว่างหน้าจอกับ bean ครับผมแบ่นเป็นให้ดูเป็นสามรูปแบบนะครับ
1.1 อ้างถึง Element แบบธรรมดาก่อนละกันครับ เช่น
#{helloManagedBean.name} หรืออาจจะ nested ลงไปก็ได้เช่นถ้าให้ userView เป็น POJO ที่มี name เป็น property อีกทีก็ #{expressionManagedBean.userView.name}
1.2 อ้างถึง Element ที่เป็น array, list ต่างๆ ดังรูปแบบนี้นะครับ #{bean.array[index]}
#{expressionManagedBean.listdata[0]}
#{expressionManagedBean.listdata[1]}
ตามตัวออย่างนี้ listdata เป็น String[] listdata = new String[4]
#{expressionManagedBean.userList[0].name}
#{expressionManagedBean.userList[0].username}
#{expressionManagedBean.userList[0].group}
#{expressionManagedBean.userList[1].name}
#{expressionManagedBean.userList[1].username}
#{expressionManagedBean.userList[1].group}
ตามตัวออย่างนี้ userListเป็น List<UserView> userList = new LinkedList<UserView>()
1.3 อ้างถึง Element ที่เป้น Map, Hash โดยจะมีรูปแบบดังนี้คือ #{bean.hashtable[key]}
#{expressionManagedBean.mapdata["HOTMAIL"]}
#{expressionManagedBean.mapdata["GMAIL"]}
ตามตัวออย่างนี้ Map<String, String> mapdata = new HashMapString, String>()
ex. <h:inputText value="#{helloManagedBean.name}" /> หรือใช้ print ตรงๆ เลยก็ได้ {helloManagedBean.name}
โดยการทำแบบนี้นั้นตัว HelloManagedBean ก็ต้องมีการประกาศ set/get ของ property name ไว้ด้วยเพือให้สามารถเข้าถึงข้อมูลได้นะครับ
2. เราจะใช้ในการให้ JSF call ไปที่ action ต่างๆของ ManagedBean ตัวนี้ดูง่ายครับ ก็เรียกตรงๆได้เลย
ex. <h:commandButton value="OK" action="#{helloManagedBean.hello}" />
hello เป็น method นะครับไม่ใช่ property ไม่ต้องสร้าง getHello นะครับ ;P
3. ใช้ EL Operators ต่างๆ ดังนี้
Arithmetic :: – +-*/div%mod
Relational :: Use eq, ne, lt, gt, ge, instead of ==, !=, <, >, >=
Logical :: Use and, or, not instead of &&, ||, !
Empty :: empty โดยที่จะเป็น true เมือเป็น null, empty string, empty array, empty list, empty map และเป็น False ในกรณี่อื่นๆ
ex. #{3+2-1}, #{3+2-1}, #{3%2}, #{3/4 == 0.75}, #{ null == "test" }, #{true ? 'true' : 'false'}
update svn แล้วก็มาลองรันกันดูเลยครับ
1. http://127.0.0.1:8080/easyjsf/expression.jsf
2. http://127.0.0.1:8080/easyjsf/operators.jsf
copyright 2010 @nuboat in wonderland