Primefaces 6.0 对话框框架和框架集

Posted

技术标签:

【中文标题】Primefaces 6.0 对话框框架和框架集【英文标题】:Primefaces 6.0 Dialog Framework and frameset 【发布时间】:2017-01-24 10:51:01 【问题描述】:

我们在 weblogic 11g 下使用 jsf 2.1 + primefaces 6.0 + primefaces-extensions 6.0.0,mojarra 2.1.7。

由于嵌套对话框的要求,我们首次使用 primefaces 6.0。

在带有框架的页面中使用对话框框架从支持 bean 打开对话框时,我们检测到一个问题。

我们在左边有一个菜单,在右边我们访问这个 xhtml 页面(取自展示):

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
    <h:form>
        <p:commandButton value="View" icon="ui-icon-extlink" actionListener="#dfView.viewCars" />
    </h:form>
</h:body>
</html>

点击 p:commandbutton 后,DOM 检查器会显示已在 body 和 html 标签之外创建对话框,如下图所示:

Dialog rendered outside body

如果我们使用相同的代码(并且没有框架)创建一个新的 .xhtml 并单击 p:commandButton 结果如预期并打开对话框:

Dialog rendered correctly

我们一直在尝试从 backingBean 添加属性“appendTo”,但“body”、“@body”和“@(body)”都不起作用:

package test;

import java.util.HashMap;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

@ManagedBean(name = "dfView")
public class DFView 

public void viewCars() 
    final Map<String,Object> options = new HashMap<String, Object>();
    options.put("resizable", false);
    options.put("appendTo", "@(body)");
    RequestContext.getCurrentInstance().openDialog("viewCars", options, null);


public void viewCarsCustomized() 
    final Map<String,Object> options = new HashMap<String, Object>();
    options.put("modal", true);
    options.put("width", 640);
    options.put("height", 340);
    options.put("contentWidth", "100%");
    options.put("contentHeight", "100%");
    options.put("headerElement", "customheader");

    RequestContext.getCurrentInstance().openDialog("viewCars", options, null);


public void chooseCar() 
    RequestContext.getCurrentInstance().openDialog("selectCar");


public void onCarChosen(final SelectEvent event) 
    final Car car = (Car) event.getObject();
    final FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Car Selected", "Id:" + car.getId());

    FacesContext.getCurrentInstance().addMessage(null, message);


public void showMessage() 
    final FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "What we do in life", "Echoes in eternity.");

    RequestContext.getCurrentInstance().showMessageInDialog(message);


这个问题有解决办法吗?

提前致谢,

亚历杭德罗

附言。 Primefaces 5.2 中的相同代码适用于框架

【问题讨论】:

【参考方案1】:

我正在使用 primeface 6.0 我创建了一个对话框,也是一个内部确认对话框。 我解决了与对话框相关的问题被阻止并确认对话框。

我在内部确认对话框中添加了下一个代码: &lt;p:confirmDialog appendTo="@(body)"

【讨论】:

感谢@Lisandro,正如我在帖子中提到的,我们尝试将 appendTo 选项添加到传递给 openDialog 方法的 Map 中,但似乎 PF Dialog Framework 无法识别它。

以上是关于Primefaces 6.0 对话框框架和框架集的主要内容,如果未能解决你的问题,请参考以下文章

对话框关闭事件后 Primefaces 更新组件

无法阻止Primefaces民意调查

如果在primefaces中禁用复选框值,则该值将为false

Primefaces确认对话框不更新数据表

Primefaces如何更新对话框中的内容并保持对话框居中?

JSF 2.0 无法从 primefaces 呈现对话框