我正在使用JSF + Primefaces 6.0开展项目。 在这个特定的页面上有一些错误,我不知道如何解决。 当#selected-operator或#selected-site值被更改时,#operatorsForm形式将通过AJAX正确更新,结果将显示在数据表中。
问题是当我点击在数据表中加载的commandButton时,模态对话框" confirmWV"没有显示。 在我的其他页面上,我有相同的模态代码,但是那些按钮没有通过AJAX加载,所以这让我认为这是与AJAX相关的问题。 调试时,单击按钮不会调用confirmOperatorsRightsAction()方法。
感谢您的帮助!
page.xhtml
<h:form id="operatorForm">
<p:selectOneMenu id="selected-operator"
value="#{operatorController.selectedOperator}">
<f:selectItem itemValue="" itemLabel="Choose operator" />
<f:selectItems value="#{operatorBean.getOperatorsList()}"
var="operator" itemLabel="#{operator.username}"
itemValue="#{operator.idPk}" />
<f:ajax execute="selected-operator" />
</p:selectOneMenu>
<p:selectOneMenu id="selected-site"
value="#{operatorBean.selectedSite}">
<f:selectItem itemValue="" itemLabel="Choose site" />
<f:selectItems value="#{operatorBean.getSites()}"
var="site" itemLabel="#{site.strname}" itemValue="#{site.idPk}" />
<f:ajax execute="selected-site" />
</p:selectOneMenu>
</h:form>
<h:form id="operatorsForm">
<p:dataTable var="operatorSite"
value="#{operatorBean.getOperatorSites()}"
id="operators-list">
<p:column headerText="#{msg['item.Username']}">
#{operatorSite.operator.username}
</p:column>
<p:column headerText="#{msg['item_SiteName']}">
#{operatorSite.site.strname}
</p:column>
<p:column headerText="">
<p:commandButton
actionListener="#{operatorBean.confirmOperatorsRightsAction(operatorSite)}"
value="#{msg['item_Delete']}"
icon="fa fa-trash">
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
<p:dialog widgetVar="confirmWV" modal="true"
header="#{msg['modal.confirm.title']}" height="150" width="450">
<h:form id="confirmOperatorForm">
<my:confirm />
</h:form>
</p:dialog>
OperatorBean.java
public void confirmOperatorsRightsAction(OperatorSite os) {
//some code here
RequestContext.getCurrentInstance().update("confirmOperatorForm");
RequestContext.getCurrentInstance().execute("PF('confirmWV').show();");
}