我的基本问题是"是否存在取消对话框最大化的事件",我知道我可以为"最大化"事件注册ajax,但从全屏模式恢复到正常大小后发生的事件呢?">
我现在面临的问题描述:当对话框从全屏模式返回到正常模式时,滚动消失
文件内容:
<p:dialog ... width="600" height="400" maximize="true">
<p:panel style="overflow:auto;">
<p:dataTable style="min-width:800px !important;">
....cols/data ~height~600px;
</p:dataTable>
</p:panel>
</p:dialog>
在.show((操作中,一切看起来都很好,在调整大小操作中,滚动条也以正确的方式呈现。在UNmaximum操作(混合回正常大小模式(后,所有东西都会破裂。
Primefaces我尝试并复制了我的项目3.5.RC1版本和最新的5.2版本。
假设在最新版本中问题仍然存在,我需要实现一些变通方法,但无法:(
尝试使用
<p:ajax event="minimize" listener="#{bean.listener}" update="controls" />
在您的p:对话框中。
如何修复:
Primefaces版本3.5.23、4.0.7和5.0.0已经实现了不解决未最大化事件的方法,因为不可能仅在未最大化时调用该事件。
解决方法包括手动更改文件primefaces.js中Dialog javascript的saveState和restoreState。方法是保存和恢复对话框内容的宽度和高度。
最好的方法是将解决方案从高级版本或精英版本移植到3.5。
我不知道,也没有检查素数面<6,但从那时起就不需要变通方法了。您可以使用如下ajax事件:
<p:dialog widgetVar="myDialog"
header="Dialog"
onShow="updateClientSide()"
modal="true" blockScroll="true" responsive="true"
closable="true" closeOnEscape="true" maximizable="true"
height="80vh" width="80vw" minHeight="300" minWidth="330">
<p:ajax event="maximize" update="{id's to update}" onstart="updateClientSide()" process="@none"/>
<p:ajax event="restoreMaximize" update="id's to update" onstart="updateClientSide()" process="@none"/>
<div>
content
</div>
</p:dialog>
...
<script type="text/javascript">
function updateClientSide() {
your client side stuff
};
</script>
请注意,给定的示例仅用于客户端回调,如果您想在服务器端处理事情,则需要向p:ajax标记添加一个侦听器,并根据需要更新部分请求的进程值。
关于
编辑:请提及Kukeltje关于在primefaces扩展框架的帮助下执行纯客户端回调的评论。通过使用pe:javascript库标签,仍然可以使用给定的primefaces组件提供的事件,但到服务器端的循环被完全跳过。