JSF 使用ValueBinding类

3.6  使用ValueBinding类
javax.faces.el.ValueBinding类表示一个对象,可以用它来访问由一个动作或值引用表达式所表示的属性。可调用javax.faces.application.Application类的getValueBinding方法,同时传入值引用,以此来获取一个ValueBinding的实例。
ValueBinding类有4个方法:getType、getValue、setValue和isReadOnly。我们在以下的章节中讨论这些方法。
3.6.1  获取ValueBinding所表示的对象的类型
调用Application类的getValueBinding方法需要传入一个值引用,返回值可能是一个JavaBean、一个JavaBean的属性或是另外一个对象。getType方法可返回ValueBinding所表示的对象的类型。下面是getType方法的签名:
public abstract Class getType(FacesContext facesContext)
throws javax.faces.el.PropertyNotFoundExcetpion;
比如,假设您的应用配置文件里有如下managed-bean标记:
<managed-bean>
<managed-bean-name>shoppingCartBean</managed-bean-name>
<managed-bean-class>
buydirect.ShoppingCartBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
则使用以下代码会在控制台输出表示ShoppingCartBean的类名:buydirect.ShoppingCartBean。
FacesContext facesContext = FacesContext.getCurrentInstance();
ApplicationFactory factory = (ApplicationFactory)
FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
Application application = factory.getApplication();
ValueBinding valueBinding =
application.getValueBinding("shoppingCartBean");
System.out.println(valueBinding.getType(facesContext).getName());
3.6.2  获取和设置ValueBinding对象的属性
要获取由ValueBinding对象表示的属性值,可使用getValue方法。此方法具有如下签名:
public abstract Object getValue(FacesContext facesContext)
throws javax.faces.el.PropertyNotFoundException
比如,下面的代码提取由一个ValueBinding表示的ShoppingCartBean对象:
FacesContext facesContext = FacesContext.getCurrentInstance();
ApplicationFactory factory = (ApplicationFactory)
FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
Application application = factory.getApplication();
ValueBinding valueBinding =
application.getValueBinding("shoppingCartBean");
ShoppingCartBean bean =
(ShoppingCartBean) valueBinding.getValue(facesContext);
setValue方法则是用来改变由ValueBinding对象表示的属性值。其方法签名如下:
public abstract void setValue
(FacesContext facesContext, Object value)
throws javax.faces.el.PropertyNotFoundException
比如,假设ShoppingCartBean有一个叫作purchaseId的属性,其声明如下:
private String purchaseId;
public String getPurchaseId() {
return purchaseId;
}
public void setPurchaseId(String purchaseId) {
this.purchaseId = purchaseId;
}
则下面的代码可获取ShoppingCartBean对象的purchaseId属性,并将其值设为12345。
FacesContext facesContext = FacesContext.getCurrentInstance();
ApplicationFactory factory = (ApplicationFactory)
FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
Application application = factory.getApplication();
ValueBinding valueBinding =
application.getValueBinding("ShoppingCartBean.purchaseId");
valueBinding.setValue(facesContext, "12345");
// print the current value
System.out.println("Purchase Id:" +
valueBinding.getValue(facesContext));
这段代码会在控制台输出如下文本:
Purchase Id: 12345
3.6.3  检查ValueBinding属性是否可写
isReadOnly方法返回一个指示当前ValueBinding对象所表示的属性是否可写的boolean值。其方法签名如下:
public abstract boolean isReadOnly(FacesContext facesContext)
throws javax.faces.el.PropertyNotFoundException
比如,下面的代码在改变ShoppingCartBean的purchaseId属性前先检查其是否可写。
FacesContext facesContext = FacesContext.getCurrentInstance();
ApplicationFactory factory = (ApplicationFactory)
FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
Application application = factory.getApplication();
ValueBinding valueBinding =
application.getValueBinding("shoppingCartBean.purchaseId");
if (!valueBinding.isReadOnly(facesContext))
valueBinding.setValue(facesContext, "12345");
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章