【问题标题】:JSF 2.0 h:panelgroup render by h:commandButton through f:ajax, which is inside ui:repeatJSF 2.0 h:panelgroup 由 h:commandButton 通过 f:ajax 渲染,在 ui:repeat 中
【发布时间】:2013-05-21 09:23:47
【问题描述】:
<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 标记中使用渲染时,它显示以下错误

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

【问题讨论】:

  • 这可能就是您要搜索的内容:stackoverflow.com/questions/7088273/…
  • @AlexandreLavoie 谢谢。通过添加render=":form:userPanel"可以正常工作,但我对此有疑问,为什么我们需要在form 之前添加:

标签: jsf-2


【解决方案1】:

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

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

另见:

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2011-11-23
    • 2012-05-29
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2011-04-02
    相关资源
    最近更新 更多