ui中的组件ID:重复问题

时间:2011-07-05 09:00:32

标签: ajax jsf-2

我正在尝试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的原因吗?

感谢。

1 个答案:

答案 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" />

代替。