假设我有以下结构:
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。
答案 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.ELContext。java.lang.Object)方法的value参数。这并不总是一样的 的getValue()。的getClass()。例如,在表达式的情况下 引用一个数组元素,getType方法将返回 数组的元素类型,可能是类型的超类 当前在指定数组元素中的实际元素。
对于MethodExpression,请阅读此内容。