【问题标题】:Handle a client component from a server during an AJAX request在 AJAX 请求期间处理来自服务器的客户端组件
【发布时间】:2011-06-20 16:56:51
【问题描述】:

在我的应用程序中,我实现了一个用于显示信息和错误消息的消息栏,当屏幕导航发生时它将关闭(由 window.onunload 事件触发的 javascript 函数)。

在少数地方,我实现了 a4j:commandButton 来呈现特定的模态面板,而无需刷新屏幕。在这种情况下,现有的消息栏会保留(因为没有屏幕刷新!!!),新的消息栏会附加到它上面。

我非常了解a4j:commandButton的属性“onClick()”的实现。在所有现有按钮中实现它可能会很忙。我想要在服务器端一次性实现(如果可能的话在 PhaseListener),这样我就不需要编写任何 onunload javascript 函数或 onClick() 功能。

谁能给我一个关于如何在 ajax 场景中从服务器端控制消息栏的简要想法。?

提前致谢!!!!

【问题讨论】:

    标签: java javascript jsf ajax4jsf


    【解决方案1】:

    我知道你问的是服务器端解决方案,但我认为你可能更喜欢这个问题的相对简单的客户端解决方案。

    如果您想为“onClick”上的所有或部分按钮元素添加功能,您可以尝试使用以下代码。

    替换为您要在点击事件中添加的函数。 替换为您的表单名称(您可以将 is 作为参数传递)

    顺便说一句,此代码支持 IE FF CHROME

    function addFunctionToAllButtons()
    {
        var buttons = document.*YourForm*.getElementsByTagName("button"); 
        for(i=0; i<buttons.length; i++)
        {
            if(buttons[i].id =='yourButtonId')
            {
            attachEvent(buttons[i],'click',*yourFunction*,false);
            }
        }
    
    }
    
    
    function attachEvent(obj,evt,fnc,useCapture)
    {
        if (!useCapture) useCapture=false;
        if (obj.addEventListener)
        {
            obj.addEventListener(evt,fnc,useCapture);
            return true;
        }
        else if (obj.attachEvent) 
            return obj.attachEvent("on"+evt,fnc);
        else
        {
            MyAttachEvent(obj,evt,fnc);
            obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
        }
    } 
    

    -- 编辑

    要支持子页面,我们需要特别注意我们在以下行中引用的 buuton id:

    if(buttons[i].id =='yourButtonId')
    

    和表单ID

    希望这会有所帮助。

    【讨论】:

    • 似乎是一个更好的客户端实现。!这个可以在父页面实现,让子页面继承吗?
    • @radKrish 可以在子页面中实现。编辑答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2011-01-03
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多