我正在尝试render
祖父母组件。
代码:
<h:form prependId="false>
<h:panelGroup id="outer_panel">
<ui:repeat var="curr" value="#{bean.map}">
<h:panelGroup id="inner_panel">
<h:commandButton value="Remove" action="actionThing" >
<f:ajax render="outer_panel" />
</h:commandButton>
</h:panelGroup>
</ui:repeat>
</h:panelGroup>
</h:form>
我得到一个例外:
javax.faces.FacesException: Component with id:outer_panel not found
尝试将索引添加到id,但这两个都不起作用:
<h:form prependId="false>
<h:panelGroup id="outer_panel">
<ui:repeat var="curr" value="#{bean.map}" varStatus="loop">
<h:panelGroup id="inner_panel">
<h:commandButton value="Remove" action="actionThing" >
<f:ajax render="#{loop.index+1}:outer_panel" />
</h:commandButton>
</h:panelGroup>
</ui:repeat>
</h:panelGroup>
</h:form>
知道找不到ID的原因吗?
感谢。
答案 0 :(得分:3)
找不到它,因为您在render
属性中使用了相对客户端ID。它变得相对于最近的父naming container组件。在这种情况下,这是<ui:repeat>
(它预先生成具有行索引的子节点的客户端ID)。因此ID为outer_panel
的组件必须位于<ui:repeat>
内才能使其正常工作。但是,outer_panel
实际上 。
您需要指定绝对客户端ID而不是相对客户端ID。要使其绝对(以便它基本上从视图根目录扫描),请在客户端ID前加:
。
<f:ajax render=":outer_panel" />
如果您未在prependId="false"
上使用<h:form>
,那么您应该使用
<f:ajax render=":form_id:outer_panel" />
代替。