我不知道为什么我无法从支持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"
希望这可以帮助!!!