我不知道为什么我无法从支持bean中找到组件,而该bean的代码却能做到:

UIComponent component = viewRoot.findComponent("form_01:meterDialog:lazyGrid");
component.toString();


jsf是:

<h:form id="form_01">
    <p:dialog id="meterDialog" header="Meters" widgetVar="meter_data"
    minimizable="true" maximizable="true" draggable="true"
    resizable="true" height="auto" width="auto" onShow="enableForm()">

        <p:remoteCommand id="cmd" name="enableForm" update="lazyGrid">
        <f:setPropertyActionListener value="#{true}"
            target="#{chartBean.formEnable}" />
        </p:remoteCommand>

        <p:panelGrid id="lazyGrid" rendered="true">
        </p:panelGrid>
    </p:dialog>
</h:form>


问题是它找不到lazyGrid,可以找到带有以下内容的meterDialog:

viewRoot.findComponent("form_01:meterDialog");


没问题,但没有组件lazyGrid或cmd

最佳答案

如果您的表单具有属性prependId =“ false”,则可以找到具有实际组件ID的属性。

由于您没有设置该属性,因此必须从UIViewRoot进行引用。如果p:dialog是一个命名容器(我不确定),则必须将lazyGrid称为“ form_01:meterDialog:lazyGrid”,否则将其称为“ form_01:lazyGrid”。

这是链接,它将为您提供更多见解
How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"

希望这可以帮助!!!

10-06 03:34