我正在实现自定义JSF组件渲染器(即org.primefaces.component.messages.MessageRenderer
),并希望在用户单击消息时添加要打开的输出新对话框。
据我所知,我可以手动在encodeEnd
方法中添加所有需要的HTML / CSS / JS,但这样做会很浪费,因为我们已经有了一个Dialog组件。
我的问题是:如何以编程方式构造和添加输出新的JSF组件(在我的情况下是对话框)?我假设我们可以通过指定适当的属性使其与现有元素进行交互。
答案 0 :(得分:0)
事实证明这很简单:
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中显示嵌套的模态对话框并不容易。