提问人:mulivieri 提问时间:11/30/2022 最后编辑:Jasper de Vriesmulivieri 更新时间:11/30/2022 访问量:78
将 Primefaces 6.2 迁移到 Primefaces 8.0 时的 menuitem 问题
menuitem issue on migration Primefaces 6.2 to Primefaces 8.0
问:
我参与了将Java Web应用程序从Primefaces 6.2迁移到Primefaces 8.0的工作。 按照官方迁移指南解决所有问题后,应用程序可以正常工作,但 p:menubutton 组件上的行为除外。
它涉及生成数据表的 xhtml,其中一列包含由 p:menubutton 组件上的属性模型呈现的 DefaultMenuItem 对象。
问题: 我第一次调用每个 DefaultMenuItem 中设置的操作之一时,它就可以工作了。该操作将打开一个对话框,但在不执行新提交的情况下关闭打开的对话框,第二次调用不会产生任何输出。我可以在浏览器控制台的网络选项卡中评估ajax请求,听起来没有任何问题,它等于第一次调用。 服务器控制台和浏览器控制台中都没有错误。这在Primefaces 6.2上没有发生。 迁移前后涉及的所有组件都是相同的。
代码如下:
List.xhtml 包含 p:menubutton 组件的 UI:组合
<ui:composition>
<h:form id="someForm" enctype="multipart/form-data">
<p:menuButton
model="#{SomeBean.model}"
id="idmenubutton"
icon="fa fa fa-ellipsis-v"
menuStyleClass="response-single-style"
title="some_title"
disabled="false"/>
</h:form>
</ui:composition>
dialog.xhtml 调用在每个 DefaultMenuItem 上设置的操作后呈现的 ui:组合
<ui:composition>
<p:importEnum type="some.path.SomeEnum" var="someEnum"/>
<p:dialog id="idDlgGeneric" header="some_header" styleClass="generic_pnlMaxWidth95"
widgetVar="dlgGeneric" modal="true" onShow="dlgOnShow(this.jqId);onShowForClosableDlg('dlgGeneric')"
responsive="true" fitViewport="true" showEffect="fade" hideEffect="fade" resizable="false" closable="true">
<p:panel rendered="true">
<p:panelGrid layout="grid" columns="2" columnClasses="ui-grid-col-6,ui-grid-col-6" styleClass="ui-panelgrid-blank">
<p:commandButton id="saveDlg" icon="fa fa-pencil" value="Save" action="#{SomeOtherBean.save}" styleClass="generic_width100"/>
<p:commandButton icon="fa fa-times" value="Close" action="#{SomeBean.destroyBeanViewScope('SomeOtherBean')}" onclick="PF('dlgGeneric').hide()" styleClass="generic_width100 uniqueCloseButton"/>
<p:defaultCommand target="@form:saveSomeOtherBean" scope="@form:idDlgGeneric" />
</p:panelGrid>
</p:panel>
</p:dialog>
</ui:composition>
SomeBean.java 初始化用于 p:menubutton 组件的模型的类
@Named(ConstantsWeb.MBean.SOME_BEAN)
@ViewScoped
public class SomeBean extends AbstractBean {
private transient MenuModel model;
public MenuModel initModel() {
model = new DefaultMenuModel();
final DefaultMenuItem title = DefaultMenuItem.builder()
.value("value_description")
.disabled(true)
.style("opacity:1;font-weight:bold;")
.build();
model.getElements().add(title);
for (final SomeEnum resp : responsSingle) {
Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();
List<String> list = new ArrayList<String>();
list.add(String.valueOf(resp.getId()));
map.put("respId", list);
final DefaultMenuItem menuItem = DefaultMenuItem.builder()
.value(resp.getDisplayName())
.command("#{SomeBean.someMethod}")
.params(map)
.onstart("PF('statusDialog').show();")
.onsuccess("PF('statusDialog').hide();")
.update(someForm:idDlgGeneric)
.icon(resp.getIcon())
.disabled(false)
.build();
model.getElements().add(menuItem);
}
model.generateUniqueIds();
}
} else {
model = null;
}
return model;
}
public void someMethod() {
}
public void destroyBeanViewScope(final String... yourBeanArray) {
FacesHelper.destroyBeanViewScope(yourBeanArray);
renderResponse = false;
FacesHelper.update(someForm:idDlgGeneric);
}
}
有人可以帮助我吗?
答: 暂无答案
评论
model.generateUniqueIds();
model.generateUniqueIds();