当我尝试通过ajax调用渲染panelGroup时,它会给出未知的id。
<h:form id="form1" prependId=false>
<h:panelGroup id="panel1">
<h:dataTable/>
<ui:repeat value="#{bean.page}" var="page">
<h:commandLink value="#{page}">
<f:ajax execute="@form" render="panel1" listener="#{bean.page}" />
</h:commandLink>
</ui:repeat>
</h:panelGroup>
</h:form>
当我尝试使用此代码时,它会给出未知的id panel1。我尝试了id“:panel1”。我得到了同样的错误。
答案 0 :(得分:20)
相对客户端ID(即不以:
开头)是相对于当前父NamingContainer
组件的。 <ui:repeat>
也是NamingContainer
。因此render="panel1"
正在<ui:repeat>
的上下文中查找组件。这不会起作用。绝对客户端ID(即以:
开头)正在查看视图根上下文中的组件。但你把它放在<h:form>
里面 - 而这又是另一个NamingContainer
组件 - 所以render=":panel"
也无效。
以下内容应该有效,删除prependId="false"
以便您可以参考:
<h:form id="form1">
<h:panelGroup id="panel1">
<h:dataTable/>
<ui:repeat value="#{bean.page}" var="page">
<h:commandLink value="#{page}">
<f:ajax execute="@form" render=":form1:panel1" listener="#{bean.page}" />
</h:commandLink>
</ui:repeat>
</h:panelGroup>
</h:form>
顺便说一下,如果实际上想要只渲染 表,那么你应该这样做:
<h:form id="form1">
<h:panelGroup>
<h:dataTable id="table1" />
<ui:repeat value="#{bean.page}" var="page">
<h:commandLink value="#{page}">
<f:ajax execute="@form" render=":form1:table1" listener="#{bean.page}" />
</h:commandLink>
</ui:repeat>
</h:panelGroup>
</h:form>
更新:根据评论,您发现已通过配置将JSF默认NamingContainer
分隔符从:
更改为_
。在这种情况下,您需要在客户端ID选择器中使用_
而不是:
。
<f:ajax execute="@form" render="_form1_panel1" listener="#{bean.page}" />
答案 1 :(得分:0)
<ui:repeat value="#{interaction.interactionListBean}" var="interactionItr">
<h:commandLink value="#{interactionItr.interactionDate}" styleClass="#{interaction.createImage}" style="margin:0 5px 5px 0!important; display:inline-block;"><br/>
<f:ajax render=":formId:interactionDate :formId:category :formId:activity :formId:status :formId:channel :formId:status1 :formId:caseId :formId:comment :formId:user1 :formId:team :formId:user :formId:transit "
listener="#{interactionController.interactionDetailGet}"/>
<f:param name="RefId" value="#{interaction.interactionRefId}"/>
</h:commandLink>
</ui:repeat>
问题:
请参考上面的代码,他们在控制台上也不例外,但是当我看到这个帖子类似的概念被使用时,ajax listerner将不会调用我只是放置了exceute =“@ form”然后我的编码工作正常
溶液:
execute="@form"