java - 如何用 JSF 实现 JQuery 确认对话框

标签 java javascript jsf jsf-2 jquery-ui-dialog

当我按下按钮进入 JSF 页面时,我想使用 JQuery 对话框来确认操作执行(在我的例子中是确认删除行)。 我发现这个 JQuery 代码工作得很好:

<html>
    <head>
        <title>jQuery UI Example Page</title>
        <link type="text/css" href="css/custom-theme/jquery-ui-1.8.18.custom.css" rel="stylesheet" />   
        <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
        <script type="text/javascript" src="js/jquery-ui-1.8.18.custom.min.js"></script>
        <script type="text/javascript">
            $(function(){

                // Accordion
                $("#accordion").accordion({ header: "h3" });

                // Tabs
                $('#tabs').tabs();


                // Dialog           
                $('#dialog').dialog({
                    autoOpen: false,
                    width: 600,
                    buttons: {
                        "Ok": function() { 
                            $(this).dialog("close"); 
                        }, 
                        "Cancel": function() { 
                            $(this).dialog("close"); 
                        } 
                    }
                });

                // Dialog Link
                $('#dialog_link').click(function(){
                    $('#dialog').dialog('open');
                    return false;
                });

                // Datepicker
                $('#datepicker').datepicker({
                    inline: true
                });

                // Slider
                $('#slider').slider({
                    range: true,
                    values: [17, 67]
                });

                // Progressbar
                $("#progressbar").progressbar({
                    value: 20 
                });

                //hover states on the static widgets
                $('#dialog_link, ul#icons li').hover(
                    function() { $(this).addClass('ui-state-hover'); }, 
                    function() { $(this).removeClass('ui-state-hover'); }
                );

            });
        </script>
        <style type="text/css">
            /*demo page css*/
            body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;}
            .demoHeaders { margin-top: 2em; }
            #dialog_link {padding: .4em 1em .4em 20px;text-decoration: none;position: relative;}
            #dialog_link span.ui-icon {margin: 0 5px 0 0;position: absolute;left: .2em;top: 50%;margin-top: -8px;}
            ul#icons {margin: 0; padding: 0;}
            ul#icons li {margin: 2px; position: relative; padding: 4px 0; cursor: pointer; float: left;  list-style: none;}
            ul#icons span.ui-icon {float: left; margin: 0 4px;}
        </style>    
    </head>
    <body>

        <!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller-->
        <h2 class="demoHeaders">Dialog</h2>
        <p><a href="#" id="dialog_link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>Open Dialog</a></p>

        <!-- ui-dialog -->
        <div id="dialog" title="Dialog Title">
            <p>Dialog Test</p>
        </div>

    </body>
</html>

问题是我需要从这个按钮调用对话框到 Java Server Faces 页面:

<h:commandButton value="Delete" action="#{bean.deleteid}" >
    <f:ajax render="@form" execute="@form"></f:ajax>
</h:commandButton>

你能帮我实现这个例子吗?

最佳答案

这是我使用的一种方法

你需要两个按钮

第一个将被隐藏并通过点击 Yes 被调用。在确认对话框中,这个隐藏按钮将是调用服务器端方法并执行 render 的按钮。使用 f:ajax

<h:commandButton id="myHiddenButtonID" value="DeleteHiddenButton" action="#{bean.deleteid}" style="display:none">
    <f:ajax render="@form" ></f:ajax>
</h:commandButton>

现在转到将打开对话框的按钮,此按钮还将使用 execute="@form" 将表单提交到服务器(例如,如果您有选择列)

<h:commandButton value="Delete">
    <f:ajax execute="@form" onevent="openDialogFunc()"></f:ajax>
</h:commandButton>

现在开始js函数的实现

function openDialogFunc(data){
    if (data.status === 'success') {
        $('#dialog').dialog({
             autoOpen: false,
             width: 600,
             buttons: {
                 "Ok": function() { 
                     $("#myHiddenButtonID").click();
                     $(this).dialog("close"); 
                 }, 
                 "Cancel": function() { 
                     $(this).dialog("close"); 
                 } 
             }
         });
    }
}

请注意,只有在单击“确定”对话框按钮后,才会执行您的隐藏按钮 $("#myHiddenButtonID").click();否则什么也不会发生...

但我真的强烈推荐你使用h:head而不是 head<h:panelGroup而不是 div ...看看我之前的例子... jQuery Dialog in JSF

关于java - 如何用 JSF 实现 JQuery 确认对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656664/

相关文章:

java - 使用 JPQL 命名查询调用方法时 .jsp 出现 NullPointerException

java - 如何从 aerospike Java cilent 获取列表然后在单个事务中修改列表类型的 bin

javascript - 使用 Socket.io 的异步模块加载 (AMD)

java - 如何在加载时隐藏 RichFaces 组件?

java - Android:无法在 Activity 中显示从 Firebase 检索到的 POJO 到 GridView

java - 简单的 XML 框架 : XPath matching based on attribute value

javascript - 我需要在 react 功能中清除超时吗?

Javascript 变量函数不保留值

jsf - 刷新页面以加载新的区域设置

java - 从另一个 UI 获取信息