【发布时间】:2020-05-06 06:02:04
【问题描述】:
假设我有以下结构:
1) 托管 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 中,如何获取绑定到组件的类型?
我需要的是从组件中设置为“值”属性的内容中获取完整的限定类名。类似于:package.Test.attribute.
【问题讨论】:
-
既然 ui 知道它是来自 primefaces 的 InputText,你不能简单地做 InputText c = ((InputText) view.findComponent(s)).getValue().getClass()?
-
您好@MárioFernandes,谢谢您的回答。我按照你的建议做了,但它抛出 java.lang.ClassCastException: javax.faces.component.UINamingContainer cannot be cast to org.primefaces.component.inputtext.InputText
-
我假设您找到了不正确的组件。由于 p:inputText 不是 UINamingContainer。您是否传递了完整的 ID(可能需要预先设置表单 ID)
-
是的,我正在使用 PrimeFace 的 ComponentUtils.findComponentClientId 实用方法。我猜它返回的是复合而不是 inputText 但它没有意义,因为复合没有 ID。
-
我看到findComponentClientId使用了一个方法firstWithId,请问你在dom中有相同id的吗? (不一样,因为它是不允许的,但至少开始相同)
标签: jsf