我正在实现自定义 JSF 组件渲染器(即org.primefaces.component.messages.MessageRenderer
),并希望添加输出新对话框以在用户单击消息时打开。
我知道我可以在encodeEnd
方法中手动添加所有需要的 HTML / CSS / JS,但这将是一种浪费,因为我们已经有一个 Dialog 组件。
我的问题是:如何以编程方式构造并添加到输出新的 JSF 组件(在我的例子中是对话框)?我假设我们可以通过指定适当的属性使其与现有元素交互。
我正在实现自定义 JSF 组件渲染器(即org.primefaces.component.messages.MessageRenderer
),并希望添加输出新对话框以在用户单击消息时打开。
我知道我可以在encodeEnd
方法中手动添加所有需要的 HTML / CSS / JS,但这将是一种浪费,因为我们已经有一个 Dialog 组件。
我的问题是:如何以编程方式构造并添加到输出新的 JSF 组件(在我的例子中是对话框)?我假设我们可以通过指定适当的属性使其与现有元素交互。
事实证明这很容易:
Dialog dialog = new Dialog();
dialog.setModal(true);
// .. other parameters
dialog.encodeAll(context);
但我已经求助于 jqueryUI 对话框组件(您需要将 javascript 单独包含到您的页面中)
String id = "someUniqueId";
writer.startElement("div", null);
writer.writeAttribute("id", id, null);
// ... content of dialog and command link to open dialog by id
writer.endElement("div");
writer.write("<script>$('#" + id + "').dialog("{resizable : false, autoOpen: false, modal: true});\n" +
"$('#" + id + "').parent('.ui-dialog').css('z-index', 2000);</script>");
因为在 PrimeFaces 中显示嵌套的模态对话框并不容易。