Ajax 编辑后刷新数据表行(添加、修改、删除…)
可能重复:Ajax 编辑后刷新数据表行(添加、修改、删除…),ajax,jsf-2,xhtml,primefaces,Ajax,Jsf 2,Xhtml,Primefaces,可能重复: 在我的xhtml页面中,我有一个dataTable,其中包含Group类型的对象,还有一个按钮,用于将新组添加到dataTable并最终添加到数据库中 我使用的是sessionScoped托管Bean,因此在添加新记录后需要刷新datatable行 为此,我使用了command Button组件的update属性,但datatable没有刷新,代码如下: <p:fieldset legend="Groups"> <p:commandButton
在我的xhtml页面中,我有一个dataTable,其中包含Group类型的对象,还有一个按钮,用于将新组添加到dataTable并最终添加到数据库中 我使用的是sessionScoped托管Bean,因此在添加新记录后需要刷新datatable行 为此,我使用了command Button组件的update属性,但datatable没有刷新,代码如下:
<p:fieldset legend="Groups">
<p:commandButton id="newGroup" value=" New Group" onclick="newGoupDlg.show();"
type="button" update="groupsDataTable"/>
<br/>
<p:dataTable id="groupsDataTable" var="group" value="#
{projectAdminisrationMB.groupsList}"
rowKey="#{group.name}"
rowIndexVar="rowIndex"
binding="#{table}">
<f:facet name="header">
</f:facet>
<p:column id="column2">
<f:facet name="header">
<h:outputText value="Group Name"></h:outputText>
</f:facet>
<p:graphicImage value="/images/group/#{group.name}.gif" />
<h:commandLink action="#{projectAdminisrationMB.showGroupDetails}"
value="#{group.name}">
<f:setPropertyActionListener target="#{projectAdminisrationMB.selectedGroup}"
value="#{group}" />
<f:setPropertyActionListener target="#{projectAdminisrationMB.selectedGroupName}"
value="#{group.name}" />
<f:setPropertyActionListener target="#
{projectAdminisrationMB.selectedGroupDescription}" value="#{group.description}" />
<f:setPropertyActionListener target="#
{projectAdminisrationMB.selectedGroup.dbRowIndex}" value="#{table.rowIndex}" />
</h:commandLink>
</p:column>
<p:column id="column3">
<f:facet name="header">
<h:outputText id="text3" value=" Group Description "></h:outputText>
</f:facet>
<h:outputText value="#{group.description}"></h:outputText>
</p:column>
<f:facet name="footer">
</f:facet>
</p:dataTable>
<p:dialog header="New Group" widgetVar="newGoupDlg" width="750"
showEffect="explode" hideEffect="explode">
<br/> <br/>
<h:outputText value=" New Group : " />
<p:inputText id="newGroupName" value="#
{projectAdminisrationMB.newGroup.name}">
<f:validator validatorId="requiredValidator"></f:validator>
</p:inputText>
<br/> <br/>
<h:outputText value="Group Description :" />
<br/> <br/>
<p:editor id="newGroupDescription" value="#
{projectAdminisrationMB.newGroup.description}" width="600"/>
<br/> <br/>
**<p:commandButton id="ValidateNewGroup" value="Validate"
actionListener="#{projectAdminisrationMB.addNewGroup}"
onclick="newGoupDlg.hide()" update="groupsDataTable" ></p:commandButton>**
<p:commandButton id="CancelNewGroup" value=" Cancel "
onclick="newGoupDlg.hide()"></p:commandButton>
</p:dialog>
<br/> <br/>
</p:fieldset>
****
任何想法都会被告知问题最常见的原因是数据表的id没有被正确引用 在浏览器中检查数据表的实际id 当您的数据表位于类似表单的容器中时,容器的id在数据表id前面,数据表id由
:
分隔(默认情况下)
因此:
<h:form id="form">
<p:dataTable id="dt" ...
</h:form>
您还可以使用绑定:
<h:form binding="#{form}">
<p:dataTable id="#{dt}" ...
</h:form>
<h:form id="#{btnForm}">
<p:commandButton update=":#{dt.clientId}" ...
</h:form>
尝试检查firebug中的错误。可能的原因是您的数据表
前面有id
。尝试将prependId=“false”
设置为您的表单
或使用update=“:groupsdatable”
或update=“fooFormId:groupsdatable”
。此外,我建议不要在按钮中使用onclick
,而是使用oncomplete
——有时它可能会导致问题(但当然这取决于具体情况)。这些组件的封装形式在哪里?您是使用SessionScoped bean作为整个页面的支持bean,还是仅使用容器来访问数据库?@kolossus SessionScoped bean用于整个页面如果上下文在JSF2中找不到指定的客户端ID,不会引发异常?@kolossus:
将,是的<代码>
不会,不。@BalusC刚刚检查过(我相信其他人也会检查)失败。它编译页面,但仍引发异常:SEVERE:javax.faces.FacesException:找不到标识符为“pickeGrams”的组件,该标识符是从“j_idt32:grammarmgmtmenus”引用的。
。PF 3.4RC1–科洛索斯1小时ago@siebz0r谢谢,但它不起作用。单击“添加”按钮后,我将调用findAll方法
<h:form binding="#{form}">
<p:dataTable id="#{dt}" ...
</h:form>
<h:form id="#{btnForm}">
<p:commandButton update=":#{dt.clientId}" ...
</h:form>