|
JSF預設會讀取faces-config.xml中關於Bean的定義,如果想要自行設置定義檔的名稱,我們是在web.xml中提供javax.faces.CONFIG_FILES參數,例如: <web-app>
<context-param> <param-name>javax.faces.CONFIG_FILES</param-name> <param-value>/WEB-INF/beans.xml</param-value> </context-param> ... </web-app> 定義檔可以有多個,中間以 "," 區隔,例如: /WEB-INF/navigation.xml,/WEB-INF/beans.xml
一個Bean最基本要定義Bean的名稱、類別與存活範圍,例如: ....
<managed-bean> <managed-bean-name>user</managed-bean-name> <managed-bean-class> onlyfun.caterpillar.UserBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> .... 如果要在其它類別中取得Bean物件,則可以先取得javax.faces.context.FacesContext,它代表了JSF目前的執行環境物件,接著嘗試取得javax.faces.el.ValueBinding物件,從中取得指定的Bean物件,例如: FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding = context.getApplication().createValueBinding("#{user}"); UserBean user = (UserBean) binding.getValue(context); 如果只是要嘗試取得Bean的某個屬性,則可以如下: FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding = context.getApplication().createValueBinding( "#{user.name}"); String name = (String) binding.getValue(context); 如果有必要在啟始Bean時,自動設置屬性的初始值,則可以如下設定: ....
<managed-bean> <managed-bean-name>user</managed-bean-name> <managed-bean-class> onlyfun.caterpillar.UserBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>name</property-name> <value>caterpillar</value> </managed-property> <managed-property> <property-name>password</property-name> <value>123456</value> </managed-property> </managed-bean> .... 如果要設定屬性為 null 值,則可以使用<null-value/>標籤,例如: ....
<managed-property> <property-name>name</property-name> <null-value/> </managed-property> <managed-property> <property-name>password</property-name> <null-value/> </managed-property> .... 當然,您的屬性不一定是字串值,也許會是int、float、boolean等等型態,您可以設定<value> 值時指定這些值的字串名稱,JSF會嘗試進行轉換,例如設定為true時,會嘗試使用Boolean.valueOf()方法轉換為boolean的 true,以下是一些可能進行的轉換:
您也可以將其它產生的Bean設定給另一個Bean的屬性,例如: ....
<managed-bean> <managed-bean-name>user</managed-bean-name> <managed-bean-class> onlyfun.caterpillar.UserBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>other</managed-bean-name> <managed-bean-class> onlyfun.caterpillar.OtherBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>user</property-name> <value>#{user}</value> </managed-property> </managed-bean> .... 在上面的設定中,在OtherBean中的user屬性,接受一個UserBean型態的物件,我們設定為前一個名稱為user的UserBean物件。 |