是否有可以关闭primefaces覆盖面板的java命令?或者是否有一种方法可以在单击按钮时使覆盖面板内的按钮关闭面板?
您可以轻松地向overlaypanel添加一个按钮以关闭它,例如
<p:overlayPanel widgetVar="myOverlayPanel" ... >
<p:commandButton ... onComplete="PF('myOverlayPanel').hide(); ... />
</p:overlayPanel>
你也可以用Java做到这一点
private void doSomething() {
RequestContext ctx = RequestContext.getCurrentInstance();
ctx.execute("PF('myOverlayPanel').hide();");
}
把它放在p:overlayPanel标签内,并使用overlayPanel id设置p:effect'for'attrib,使用appendToBody = true。
<p:commandLink styleClass="ui-icon ui-icon-triangle-1-e">
<p:effect type="slide" for="idOverlayPanel" event="click">
<f:param name="mode" value="'hide'"/>
<f:param name="direction" value="'right'"/>
</p:effect>
</p:commandLink>
没有效果参数
<p:commandLink styleClass="ui-icon ui-icon-close" >
<p:effect type="slide" for="idOverlayPanel" event="click"/>
</p:commandLink>
您可以将幻灯片效果更改为另一个,css样式类。
对不起,我的英语不好
我用jQuery和css完成了这个。请检查以下代码
<p:overlayPanel widgetVar="overlay" showEffect="blind" showCloseIcon="true" styleClass="lane-overlay" dynamic="true" dismissable="true" hideEffect="blind">
<script>
$(document).ready(function(){
$(".closeIcon").click(function(){
$(".lane-overlay").hide();
});
});
</script>
<p:commandButton value="close" styleClass="closeIcon"/>
`enter code here`
怎么样的事情(没有测试过自己)
客户端唯一解决方案
<p:commandButton id="basic" onclick="jQuery('#IdOfThePanel').hide()"></p:commandButton>
或客户端+服务器端
JSF:
<p:commandButton value="Save" actionListener="#{myBean.doSomething}"/>
Java的:
public void doSomething(ActionEvent actionEvent) {
RequestContext context = RequestContext.getCurrentInstance();
context.execute("jQuery('#IdOfThePanel').hide()");
}
看看这里从java执行js
Executing Javascript from Server Side
p.s也许代替IdOfThePanel你必须添加一些前缀,如formID:IdOfThePanel ...取决于你的情况......
编辑:而不是jQuery('#IdOfThePanel').hide()
只使用panelWidgetVar.hide()
或更新的PrimeFaces版本,PF('panelWidgetVar').hide()
我发现(至少在PrimeFaces 7.0中)p:commandButton
只是更新窗体或overlayPanel外的任何组件将关闭overlayPanel。例如,
<p:commandButton value="Close" update="myform" />
我唯一担心的是,我找不到具体解释这个或为什么会发生这种情况的文档,所以我有点犹豫要不要依赖它。另一方面,它似乎比onclick="PF('panelWidgetVar').hide();"
做得更干净,update
往往会使我的浏览器窗口空白并重新绘制整个页面,而单独的qazxswpoi似乎只刷新了我需要更新的页面部分。