java 代码
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>
- <managed-bean-name></managed-bean-name>shoppingCartBean
- class>
- buydirect.ShoppingCartBean
- class>
- <managed-bean-scope></managed-bean-scope>session
- 则使用以下代码会在控制台输出表示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");