در JSF 2.0 می توان بجای استفاده در علامت dot برای فراخوانی Property ها از علامت [] استفاده نمود. به عنوان دستورات زیر با هم برابر میباشند :
#{beanName.propertyName}
#{beanName["propertyName"]}
#{beanName['propertyName']}
به سه دلیل می توان از براکت در دستورات Expression Language استفاده نمود :
- هنگامی که میخواهید مقداری را از array یا map در صفحه JSF نشان دهید.
- اگر میخواهید از یک عبارت رشته ای شامل dot در دستورات Expression Language استفاده نمائید، msgs[“label.username”].
- با استفاده از علامت براکت می توان Property های دینامیک ایجاد نمود; bean1[bean2.property1]
مثال اول: فرض کنید دو کلاس Bean بنام های User و Address ایجاد کرده اید. کلاس User شامل اطلاعات کاربری و کلاس Address شامل اطلاعات آدرس محل سکونت آنها میباشد. با استفاده از دستور #{user[‘address’][‘city’]} میتوان به نام شهر محل سکونت کاربران مستقیما در صفحه JSF وارد نمود. کدهای این کلاس ها بصورت زیر میباشد:
@ManagedBean(name = "user")
@SessionScoped
public class UserBean implements Serializable {
private String name = "";
@ManagedProperty(value="#{address}")
private AddressBean address;
public String getName() {
return name;
}
public void setName(String newValue) {
name = newValue;
}
public AddressBean getAddress() {
return address;
}
public void setAddress(AddressBean address) {
this.address = address;
}
}
@ManagedBean(name = "address")
@SessionScoped
public class AddressBean implements Serializable {
private static final long serialVersionUID = 1L;
private String city;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
به کدهای کلاس UserBean توجه کنید. در این کلاس باید استفاده فیلدهای کلاس Address باید کلاس AddressBean را با استفاده از علامت @ManagedProperty تزریق یا Inject نمائید.
نکته: متد setter برای فیلد آدرس باید حتما در کلاس UserBean تعریف گردد.
مثال دوم: اگر میخواهید مقدار ایندکس 5 از آرایه ی ListTest را از کلاس UserBean فراخوانی نمائید، می توانید از دستور #{userBean.listTest[5]} استفاده نمائید.