1
<h:panelGroup id="userPanel" >
   <ui:repeat value="#{searchView.userList}" var="user" rowKeyVar="index" >
     //other code   
     <h:commandButton value="test" action="#{searchAction.doFindUsers}"   >
        <f:ajax execute="@this" event="action" render="userPanel" />
    </h:commandButton>
   </ui:repeat>

当我在 ui:repeat 标记内使用渲染时,它显示以下错误

<f:ajax>包含未知 id 'userPanel' - 无法在组件 j_idt870 的上下文中找到它

4

1 回答 1

4

当您指定不带:前缀的客户端 ID 时,它会相对于父NamingContainer组件进行搜索。在您的代码中, the<ui:repeat>是最接近的 parent NamingContainer。但是,您实际定位的组件<ui:repeat>不在<ui:repeat>. 这就解释了为什么无法使用相对客户端 ID 找到它。

您需要指定一个绝对客户端 ID。对于初学者来说,一个简单的解决方法是在生成的 HTML 输出中定位 JSF 组件的 HTML 表示,获取它id并在其前面加上:. 前缀 with:使其成为绝对客户端 ID,将始终相对于UIViewRoot而不是最近的 parent进行解析NamingContainer

也可以看看:

于 2013-05-21T11:31:43.620 回答