Tap*_*ose 46 jsf uicomponents primefaces jsf-2
我想UIComponent通过我提供的id从托管bean中找到一些.
我写了以下代码:
private UIComponent getUIComponent(String id) {
return FacesContext.getCurrentInstance().getViewRoot().findComponent(id) ;
}
Run Code Online (Sandbox Code Playgroud)
我已经定义了一个p:inputTextarea:
<p:inputTextarea id="activityDescription" value="#{adminController.activityDTO.activityDescription}" required="true" maxlength="120"
autoResize="true" counter="counter" counterTemplate="{0} characters remaining." cols="80" rows="2" />
Run Code Online (Sandbox Code Playgroud)
现在,如果在getUIComponent("activityDescription")返回方法时调用该方法null,但如果我将其调用,getUIComponent("adminTabView:activityForm:activityDescription")那么我可以获取该org.primefaces.component.inputtextarea.InputTextarea实例.
有没有办法让组件只有id,即"activityDescription"不是绝对id,即"adminTabView:activityForm:activityDescription"?
Ner*_*rve 45
您可以使用以下代码:
public UIComponent findComponent(final String id) {
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
final UIComponent[] found = new UIComponent[1];
root.visitTree(new FullVisitContext(context), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent component) {
if (component != null
&& component.getId() != null
&& component.getId().equals(id)) {
found[0] = component;
return VisitResult.COMPLETE;
}
return VisitResult.ACCEPT;
}
});
return found[0];
}
Run Code Online (Sandbox Code Playgroud)
此代码将只找到id您传递的树中的第一个组件.如果树中有2个具有相同名称的组件,则必须执行自定义操作(如果它们位于2个不同的命名容器下,则可以这样做).
| 归档时间: |
|
| 查看次数: |
92872 次 |
| 最近记录: |