获取托管bean并键入绑定到“value”属性

时间:2017-08-18 13:52:11

标签: jsf

假设我有以下结构:

1)Managed Bean:

@ViewScoped
@ManagedBean
public class TestBean {
    private Test test;

    //getters/setters
}

2)测试班:

public class Test {
    private String attribute;

    //gets/sets
}

3)XHTML

<p:inputText id="test" value="#{testBean.test.atribute}" />

现在,我知道有一种方法可以找到并获取组件实例:

UIComponent c = view.findComponent(s);

从UIComponent,我如何获得绑定到组件的类型?

我需要的是从组件中设置为“value”的属性中获取完全限定的类名。像:package.Test.attribute。

1 个答案:

答案 0 :(得分:0)

UIComponent提供getValueExpression("attributeName")

示例:

  UIViewRoot viewRoot = Faces.getViewRoot();
            UIComponent component= viewRoot.findComponent("x");
            ValueExpression value = component.getValueExpression("value");
            Class<?> expectedType = value.getType(Faces.getELContext());

NB: Faces来自Omnifaces,这是“JSF API实用程序方法的集合,主要是从线程本地FacesContext获取内容的快捷方式。“

getType() javadoc

的例外情况
  

public abstract Class getType(ELContext context)评估   表达式相对于提供的上下文,并返回最多   对象作为传递对象可接受的通用类型   将来调用setValue(javax.el.E​​LContext。java.lang.Object)方法的value参数。这并不总是一样的   的getValue()。的getClass()。例如,在表达式的情况下   引用一个数组元素,getType方法将返回   数组的元素类型,可能是类型的超类   当前在指定数组元素中的实际元素。

对于MethodExpression,请阅读此内容。