咨询:org.primefaces.PrimeFaces.Dialog.showMessageDynamic(FacesMessage)能否支持拖拽
PrimeFaces动态消息对话框拖拽问题
直接通过org.primefaces.PrimeFaces.Dialog.showMessageDynamic(FacesMessage)创建的动态消息对话框,没有官方暴露的拖拽配置选项,默认无法设置为可拖拽状态。
解决方案
1. 自定义<p:dialog>替代(推荐)
这是最稳妥且符合PrimeFaces设计规范的方式,手动构建可拖拽的消息弹窗:
XHTML部分
<p:dialog id="customMsgDialog" widgetVar="customMsgDialog" draggable="true" modal="true" closable="true"> <h:panelGroup id="msgContent"> <h:outputText value="#{messageBean.msgSummary}" style="font-weight:bold;"/> <br/> <h:outputText value="#{messageBean.msgDetail}"/> </h:panelGroup> </p:dialog>
后台Java代码
// 构建消息 FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "提示标题", "这是可拖拽的消息内容"); // 将消息内容存入Bean属性 messageBean.setMsgSummary(facesMsg.getSummary()); messageBean.setMsgDetail(facesMsg.getDetail()); // 更新弹窗内容并显示 PrimeFaces.current().ajax().update("msgContent"); PrimeFaces.current().executeScript("PF('customMsgDialog').show()");
2. 前端JS临时方案(不推荐,存在版本兼容风险)
如果不想替换组件,可以在弹窗显示后通过JS手动初始化拖拽功能,利用PrimeFaces底层Dialog组件的拖拽逻辑:
// 调用动态消息框后,延迟执行拖拽初始化 PrimeFaces.current().executeScript("PrimeFaces.Dialog.showMessageDynamic({summary:'测试', detail:'尝试拖拽我'});" + "setTimeout(function() {" + "var visibleDialog = $('.ui-dialog:visible');" + "if(visibleDialog.length) {" + "var dialogWidget = new PrimeFaces.widget.Dialog(visibleDialog.get(0), {draggable: true});" + "dialogWidget.initDraggable();" + "}" + "}, 100);");
这种方式依赖PrimeFaces的内部实现细节,不同版本可能失效,仅作为临时替代方案使用。
内容的提问来源于stack exchange,提问作者bluebloodedboy
相关产品推荐
相关产品推荐

