Primefaces 7 executeScript()未在Ajax请求中调用javascript函数

问题描述 投票:0回答:1

我有这个带有撇号7的小项目。它显示了一个包含一些数据的表,并且在每一行中都有一个按钮打开一个对话框以修改该项目。一切正常,除非我尝试关闭对话框并在Modify bean的save方法中重新加载网格。

出于某种原因,我无法理解,代码PrimeFaces.current().executeScript("closeModifyDialog(); reloadGrid();");根本不起作用,在Eclipse控制台和浏览器中都没有错误。

我试图将其放置在其他位置PrimeFaces.current().executeScript("alert('peek-a-boo')");,并且将它[[only起作用,如果我将其放置在列表的bean的构造函数中(它也是打开网站时加载的第一个bean,即非ajax)请求]

如果您还有别的问题,请问我,我错了,这是哪里错了?

itemsList.xhtml

<h:form id="itemsListForm"> <h:panelGroup id="messagesPanel" styleClass="mrm-overflow-messages"> <p:messages for="#{itemsListBean.infoMessagesBox}" closable="true" /> <p:messages for="#{itemsListBean.errorMessagesBox}" closable="true" /> </h:panelGroup> <p:remoteCommand name="**reloadGrid**" actionListener="#{itemsListBean.onSearch()}" update="@form:accordionPanel:itemsDataTable" /> <p:remoteCommand name="updateMessages" update="@form:messagesPanel" /> <p:remoteCommand name="**closeModifyDialog**" action="PF('modifyItemDialog').hide()" update="modifyItemDialog" /> <p:accordionPanel id="accordionPanel" styleClass="items-list-accordion" multiple="true" activeIndex="0,1"> <!-- FILTRI --> <p:tab title="#{defaultBundle.filters}"> </p:tab> <!-- TABELLA --> <p:tab title="#{defaultBundle.assets}"> <p:dataTable id="itemsDataTable" value="#{itemsListBean.items}" var="item" rows="10" paginator="true" rowsPerPageTemplate="10, 20, 50, 100" paginatorPosition="bottom" styleClass="items-list-datatable"> <p:column style="width: 5%; text-align: center;"> <p:commandButton value="Mod" actionListener="#{itemsListBean.modifyItem(item)}" oncomplete="PF('modifyItemDialog').show();" /> </p:column> [...] </p:dataTable> </p:tab> </p:accordionPanel> <h:panelGroup id="modifyItemDialogParent"> <p:dialog id="modifyItemDialog" widgetVar="modifyItemDialog" header="#{defaultBundle.asset}" modal="true" resizable="false" closable="true" draggable="true" position="center" showEffect="fade" onShow="initDialog();" hideEffect="fade"> <ui:include src="xhtml-dialogs/modifyItemDialog.xhtml" /> </p:dialog> <p:remoteCommand name="initDialog" actionListener="#{modifyItemBean.init()}" update="@form:modifyItemDialog:modifyItemPanel" /> </h:panelGroup> <p:confirmDialog global="true" showEffect="fade" hideEffect="fade"> <p:commandButton value="#{defaultBundle.confirm}" style="float: right;" styleClass="ui-confirmdialog-yes" /> <p:commandButton value="#{defaultBundle.back}" style="float: right;" styleClass="ui-confirmdialog-no" /> </p:confirmDialog> </h:form>
modifyItemDialog.xhtml

<h:panelGroup id="modifyItemPanel" styleClass="modify-item-panel"> <h:panelGroup id="dialogMmessagesPanel" styleClass="mrm-overflow-messages"> <p:messages for="#{itemsListBean.infoMessagesBox}" closable="true" /> <p:messages for="#{itemsListBean.errorMessagesBox}" closable="true" /> </h:panelGroup> <p:panelGrid style="width: 100%"> <p:row> <p:column> <p:inputNumber styleClass="input-big" decimalPlaces="0" thousandSeparator="" decimalSeparator="," value="#{modifyItemBean.oldCode}" /> </p:column> <p:column> <p:commandButton value="#{defaultBundle.save}" actionListener="#{modifyItemBean.save()}" update="dialogMmessagesPanel"> <p:confirm header="#{defaultBundle.save}" message="#{defaultBundle.saveItemMessage}" /> </p:commandButton> </p:column> <p:column> <p:inputNumber styleClass="input-big" decimalPlaces="0" thousandSeparator="" decimalSeparator="," value="#{modifyItemBean.newCode}" /> </p:column> </p:row> </p:panelGrid> </h:panelGroup>
ModifyItemBean.java

@ViewScoped @ManagedBean(name = "modifyItemBean") public class ModifyItemBean extends BasicBean { [...] public void save() { if (validateForm()) { switch (mode) { case MODIFY: item.setCodice(oldCode); item.setCodiceNuovo(newCode); item.setDescrizione(description); item.setBene(asset); item.setUbicazione(site); item.setFabbricato(building); item.setPiano(floor); item.setValore(value); item.setPresente(present); SaveItemEnvelopeIN request = new SaveItemEnvelopeIN(); request.setItem(item); Envelope response = itemsService.mergeItem(request); if (response.isSuccessfullyCompleted()) { **PrimeFaces.current().executeScript("closeModifyDialog(); reloadGrid();");** addInfoMessage("ITEM_SAVED_SUCCESSFULLY"); } else { addErrorMessages(response.getErrors()); } break; default: break; } } } }

javascript java jsf primefaces
1个回答
0
投票
构建一个最小的示例(仍然有问题),我尝试从以下位置更新Maven依赖关系:>

com.sun.faces jsf-api 2.0.1com.sun.faces jsf-impl 2.0.1

org.glassfish jakarta.faces 2.3.14javax.enterprise cdi-api 2.0.SP1

(感谢BalusC评论)

这就是窍门。

© www.soinside.com 2019 - 2024. All rights reserved.