在JSF2页面中打开JQuery对话框

时间:2013-08-29 16:26:15

标签: javascript jquery jsf

在我的JSF页面中,当用户点击“注册” commandLink 组件时,我必须在完成注册后在jQuery弹出窗口中向用户显示确认消息。

我的JSF页面看起来像

<h:commandLink value="Register" p:data-role="button" >
    <f:ajax execute="@form" listener="#{userController.registerUser(event)}" 
            onevent="function(data){if(data.status==='success')
            {
           openDialogFunc();
            }}" />
</h:commandLink>

<div data-role="popup" id="register-dialog" data-theme="a" data-overlay-theme="a">  

    <div data-role="header" data-tap-toggle="false">
        <h1>Success</h1>
    </div>

    <div data-role="content">
        <br/>
        <p>Your user account has now been created.</p>
        <br/>
        <h:commandButton value="Login" p:data-role="button" action="#{userController.Login}"/>
    </div>

</div>

openDialogFunc 的定义如下:

function openDialogFunc() {
    $("<a />").attr({
        "href": "#register-dialog",
        "data-rel": "popup",
        "data-position-to": "window",
        "data-theme": "a"
    }).click();

}

当我点击“注册”按钮时,它会注册用户并调用 openDialogFunc 。但是不显示jQuery弹出窗口。我在这做傻事吗? (我是Java / Web世界的新手)。

更新: - 我根据@ BalusC的建议使用了来自primefaces(版本3.5)的组件。但是对话框再次没有显示。我只是从展示中找到的样本中做了复制粘贴。浏览器日志显示错误消息“PF未定义”。 我使用以下代码启动对话框:

<p:commandButton id="basic" value="Basic" onclick="PF('dlg1').show();" type="button" />

在3.5中不起作用。它实际上是一种显示对话框的4.0方式。但是,使用以下内容无效

<p:commandButton id="basic" value="Basic" onclick="dlg1.show();" type="button" />  

无论如何,现在我正在使用Growl组件来显示通知。

我可以看到有一个Dialog Framework可用于将外部页面从bean启动到对话框中。是否可以使用相同的框架动态启动或进入对话框?

1 个答案:

答案 0 :(得分:2)

只需使用基于jQuery的JSF组件库,例如PrimeFaces。它有一个<p:dialog>组件,无需每次都编写/编写所有HTML / JS样板代码。

showcase展示了当前与PrimeFaces 4.0兼容的代码,这里是PrimeFaces 3.5兼容标记(注意<p:dialog widgetVar>,这也适用于PrimeFaces 4.0,但不知怎的,他们更喜欢展示如何使用新{ {1}}功能):

PF()

另见: