【问题标题】:How to set focus of UIComponent after <f:ajax request completed?<f:ajax 请求完成后如何设置 UIComponent 的焦点?
【发布时间】:2013-04-16 11:28:52
【问题描述】:

首先,非常感谢大家一直以来的支持。

我有一个与 .xhtml 和 'f:ajax' 相关的问题。

我正在通过默认折叠的 bean 变量设置 richfaces:collapsiblepanel 'expanded' 属性,并且在模糊事件时它会被扩展。我想在 f:ajax 请求完成后将焦点设置为 UIComponent。为此,我用 javascript 编写了一个函数,并在 f:ajax 的 'onevent' 中调用它。

但是 onevent 函数在面板打开之前触发,我无法将焦点设置在该可折叠面板中定义的 UIComponent 上。

我如何设置焦点或在 ajax 请求完成后如何触发该功能?

提前致谢。

【问题讨论】:

    标签: jsf-2 richfaces


    【解决方案1】:

    你的 js 函数应该是这样的

    function doTheFocus(data) {
        if (data.status === 'success') {
            //here goes the js code that will set the focus
            //this code will be executed only when the ajax will be done
        }
    }
    

    这就是你的f:ajax 的样子

    <f:ajax onevent="doTheFocus" />
    

    如果你想在面板打开时调用焦点的js函数可以试试

    <rich:collapsiblePanel onswitch="doTheFocus"
    

    或者(我不确定...)

    <rich:collapsiblePanel onswitch="doTheFocus()"
    

    如果您最终将使用 onswitch ,您可能需要在 doTheFocus 函数中添加一些逻辑来检查面板是否展开...

    【讨论】:

    • 关于更多的事情......我正在生成动态richfaces:可折叠面板。我正在使用 h:commandbutton 来触发生成面板的操作。那么如何将焦点设置到新生成的richfaces:可折叠面板。与最初的 'f:ajax' 一样,我无法获取 'render' 元素的 id。
    • 您可以在某个具有已知 id 的包装器内创建您的 动态 Richfaces:collapsible 面板,并指向 f:ajax 以呈现该已知包装器...
    • 是的,我已经做到了。我已将
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2011-10-31
    • 2014-04-14
    • 2011-12-06
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多