【问题标题】:How to trigger JSF render from jQuery如何从 jQuery 触发 JSF 渲染
【发布时间】:2012-05-28 17:04:01
【问题描述】:

是否可以在 jQuery 中触发 jsf <f:ajax render>

例如这样的:

/* if component Y changes
    trigger render event on component Y */

$("#source_compoment").bind("change", function(e) {
    $("#target_component").trigger("render");
});

或者换句话说,在 jQuery 中是否有“f:ajax render”的等价物?

【问题讨论】:

    标签: jquery jsf jsf-2 richfaces


    【解决方案1】:

    是的,做一个隐藏按钮

    <h:commandButton id="myHiddenButtonID" value="RenderSomething" style="display:none">
        <f:ajax render="target_component"></f:ajax>
    </h:commandButton>
    

    在js中点击

    $("#myHiddenButtonID").click();
    

    在您的具体情况下,它将如下所示:

    $("#source_compoment").bind("change", function(e) {
        $("#myHiddenButtonID").click();
    });
    

    b.t.w 没有“jQuery 中的“f:ajax render”等效项”,您只需使用 jquery 单击隐藏的 JSF 按钮。


    编辑

    如果第三方 JSF 库使用相关,您可以使用

    Primefaces RemoteCommand - (use update attribute)

    Richfaces/ a4j:jsFunction - (use reRender attribute)

    【讨论】:

    • 这完全回答了我的问题,但并没有解决背后的问题,因为我想避免在每个组件中定义&lt;f:ajax render"long list of ui_comps"&gt;,而是在 jQuery 中的一个地方进行。
    • 你确定不能用 say , panelGroup 包装这些 id 并只渲染它吗?无论如何,如果您决定使用 JSF api 执行 f:ajax,则必须输入一长串 ui_comps(不推荐 INMO)
    • 另外我认为这是一个不同的问题(“如何避免 ''"),导致用 say 包装这些 id,panelGroup 和 render only 是一个方式...
    • 错误的问题,同意。分组是一种选择。如果不推荐f:ajax render,那么推荐的方法是什么?调用 bean 方法并在那里进行渲染?我的目标也是能够对 jsf 页面(即 ui-component states/css-properties 和触发事件)进行更好的单元测试覆盖。
    • 好吧,也许我可以用与 Chris 的帖子类似的方法来解决这个问题:community.jboss.org/thread/13915?tstart=-1&_sscc=t(使用a4j:jsFunctionreRender 并在bind.("change") 事件中调用该函数)。
    猜你喜欢
    • 2013-03-22
    • 2018-01-12
    • 2019-04-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2020-12-21
    相关资源
    最近更新 更多