如何在 p:dataTable 中执行多行选择,该对话框位于具有 modal="true" 的对话框中,并且该对话框位于 ui:composition 元素中,并且该 ui 组合元素放置在布局中。
1 问题:(假设现在 p:dialog 没有放在布局中)你不能在 p:dataTable 中执行多项选择,它由 p:dialog 元素包装,除非你删除 appendToBody="true" 并添加 transient="true" . 所以现在我们有了模态对话框,它有 p:dataTable 和工作多选,所有东西都放在 ui:composition 中。表格看起来如何:
<ui:composition xmlns="http://www.w3c.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions"
xmlns:c="http://java.sun.com/jsp/jstl/core"
template="/layout/layout.xhtml">
<ui:define>
<h:form>
<p:commandButton id="multiViewButton" value="View"
update=":form:multiCars" onclick="dlg2.show();" type="button"/>
</h:form>
<h:form id="form">
<p:dialog id="modalDialog" header="Pasirinkimas" widgetVar="dlg2"
modal="true" height="300" transient="true" resizable="false" selectionMode="multiple">
<p:dataTable id="multiCars" var="car" value="#{tableBean.mediumCarsModel}" paginator="true" rows="10" selection="#{tableBean.selectedCars}">
<p:column headerText="Model" style="width:25%">
#{car.model}
</p:column>
<p:column headerText="Year" style="width:25%">
#{car.year}
</p:column>
<p:column headerText="Manufacturer" style="width:24%">
#{car.manufacturer}
</p:column>
<p:column headerText="Color" style="width:24%">
#{car.color}
</p:column>
</p:dataTable>
<p:commandButton id="multiViewButton" value="View" icon="ui-icon-search"
update=":form:displayMulti" oncomplete="multiCarDialog.show()" process="multiCars"/>
</p:dialog>
<p:dialog id="multiDialog" header="Car Detail" widgetVar="multiCarDialog"
height="300" showEffect="fade" hideEffect="explode">
<p:dataList id="displayMulti" value="#{tableBean.selectedCars}" var="selectedCar">
Model: #{selectedCar.model}, Year: #{selectedCar.year}
</p:dataList>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
2 问题。有趣的部分开始了,然后这个 ui:composition 被放置在布局中。然后 p:dialog 的盾牌出现在对话框本身的前面。解决方案是添加 appendToBody="true",但随后多选停止工作,并且不行。另一种解决方案是将对话框放置在布局元素之外,但我们在 ui:composition 元素中,所以这不起作用。我的最终解决方案是通过设置 modal="false" 来禁用 p:dialog modal 属性,但我对此并不满意。
有什么办法可以在打开 p:dialog 模式属性的对话框、ui:composition 和 layout 中的数据表中实现多行选择?