当我尝试通过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>
Run Code Online (Sandbox Code Playgroud)
当我尝试这段代码时,它会给出未知的id panel1.我尝试了id":panel1".我犯了同样的错误.
Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你确实想渲染只表,那么你应该这样做:
<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>
Run Code Online (Sandbox Code Playgroud)
更新:根据意见,事实证明,你已经改变了JSF默认NamingContainer
的分隔符:
,以_
通过配置.在这种情况下,您需要使用_
而不是:
在客户端ID选择器中.
<f:ajax execute="@form" render="_form1_panel1" listener="#{bean.page}" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10267 次 |
最近记录: |