我有以下配置: JSF:Apache MyFaces JSF-2.1核心API(版本:2.1.10) PrimeFaces 3.4.2 Tomcat 7.0.35
我有一个带有rowExpansion的DataTable和一个带有rowExpansion按钮的面板。当用户点击按钮时,我想只刷新rowExpansion中的面板。
<p:dataTable id="vmt" var="vmtemplate" value="#{myViewBean.myList}" rowKey="#{vmtemplate.id}">
<p:ajax event="rowToggle" listener="#{myViewBean.onRowToggle}" update=":growl" />
<p:column style="width:2%"><p:rowToggler /></p:column>
<p:column>...</p:column>
<p:rowExpansion>
<p:panel id="exp_panel" header="#{vmtemplate.name} Instances">
<h:form id="instancesForm">
<p:commandButton id="refreshRowExpPanel" title="Refresh" update=":growl" action="#{myViewBean.reloadData}"/>
</h:form>
</p:panel>
</p:rowExpansion>
</p:dataTable>
我想我必须设置refreshRowExpPanel按钮的update属性才能刷新exp_panel,但是当我将它设置为update =“:growl:expanel”时,我收到一个错误:
找不到引用标识符“:expanel”的组件 “的MainForm:VMT:0:refreshRowExpPanel”。
所以生成的面板ID是“mainForm:vmt:0:refreshRowExpPanel”,但是当我将此指定给更新时(update =“:mainForm:vmt:0:refreshRowExpPanel”),我得到了同样的错误:< / p>
无法找到带标识符的组件 “:mainForm:vmt:0:refreshRowExpPanel”引用自 “的MainForm:VMT:0:refreshRowExpPanel”。
使用update =“:mainForm”它可以工作,但它会刷新整个dataTable,我的扩展行将被关闭,所以它没有问题。
你能否建议一个解决方案,如何只刷新rowExp中的面板,可能是JS,还是其他任何想法?
THX!
答案 0 :(得分:0)
我建议您尝试在开头使用不带冒号的面板ID,所以:
update="mainForm:vmt:0:refreshRowExpPanel"
此外,您可能希望阅读有关making references。
的帖子答案 1 :(得分:0)
我刚刚意识到,我的数据表之外有一个表单:
<h:form id="outerForm">
<p:dataTable id="vmt" var="vmtemplate" value="#{myViewBean.myList}" rowKey="#{vmtemplate.id}">
pansion>
...
</p:dataTable>
</form>
删除外部表单,并将更新值更改为“@form”解决了问题