<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标签内使用render时,它显示以下错误
<f:ajax>
包含一个未知的id'userPanel' - 无法在组件j_idt870的上下文中找到它
答案 0 :(得分:4)
当您指定不带:
前缀的客户端ID时,会相对于父NamingContainer
组件进行搜索。在您的代码中,<ui:repeat>
是最近的父NamingContainer
。但是,您实际定位的组件不在<ui:repeat>
内,而是在<ui:repeat>
之外。这就解释了为什么使用相对客户端ID无法找到它。
您需要指定绝对客户端ID。对于初学者来说,一个简单的方法就是在生成的HTML输出中找到JSF组件的HTML表示,抓取它的id
并在其前面添加:
。使用:
进行前缀使其成为绝对客户端ID,始终相对于UIViewRoot
而非最近的父NamingContainer
进行解析。