jsf - 在 JSF 中通过 ID 查找组件

标签 jsf uicomponents

我想找一些UIComponent通过我提供的 id 从托管 bean 中获取。

我编写了以下代码:

private UIComponent getUIComponent(String id) {  
      return FacesContext.getCurrentInstance().getViewRoot().findComponent(id) ;  
}

我定义了一个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" />

现在,如果调用 getUIComponent("activityDescription") 的方法它正在返回null ,但如果我将其称为 getUIComponent("adminTabView:activityForm:activityDescription")然后我可以获得 org.primefaces.component.inputtextarea.InputTextarea实例。

有什么方法可以获取仅包含 id 的组件,即“activityDescription”而不是绝对 id,即“adminTabView:activityForm:activityDescription”?

最佳答案

您可以使用以下代码:

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 
                && id.equals(component.getId())) {
                found[0] = component;
                return VisitResult.COMPLETE;
            }
            return VisitResult.ACCEPT;              
        }
    });

    return found[0];

}

此代码将仅查找树中具有您传递的 id 的第一个组件。如果树中有 2 个具有相同名称的组件,您将必须执行一些自定义操作(如果它们位于 2 个不同的命名容器下,则这是可能的)。

关于jsf - 在 JSF 中通过 ID 查找组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14378437/

相关文章:

jquery - 如何将 JSF 的 jQuery 库包含在 Primefaces UI 中?

c# - C# 的免费或开源图表组件?

user-interface - WebGL 中的完整 UI 小部件工具包渲染

java - JSF 方面在 Eclipse 中不可用

JSF 2.0 : How to add UIComponents and their contents to view root?

java - 如何在没有 JFrame 的情况下创建自定义 float Swing 组件?

jsf - 在操作 MethodExpression 中将当前 UIComponent 作为 "this"传递

java - 如何使用 <h :dataTable> tag? 在 Facelet 中执行排序、过滤和页面导航

css - JSF 2.0更改数据表行高

java - Google App Engine + JSF 2 给出错误