我有这个带有撇号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;
}
}
}
}
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评论)这就是窍门。