JSF 2.0 h:panelgroup由h:commandButton通过f:ajax呈现,它位于ui:repeat中

时间:2013-05-21 09:23:48

标签: jsf-2

<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的上下文中找到它

1 个答案:

答案 0 :(得分:4)

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

您需要指定绝对客户端ID。对于初学者来说,一个简单的方法就是在生成的HTML输出中找到JSF组件的HTML表示,抓取它的id并在其前面添加:。使用:进行前缀使其成为绝对客户端ID,始终相对于UIViewRoot而非最近的父NamingContainer进行解析。

另见: