如何使用本机JavaScript在HTML DOM事件上调用JSF托管bean?

如何使用本机JavaScript在HTML DOM事件上调用JSF托管bean?,javascript,ajax,jsf,primefaces,facelets,Javascript,Ajax,Jsf,Primefaces,Facelets,我需要在HTMLDOMload事件期间使用ajax执行JSF托管bean操作方法,类似于jQuery的$(document).ready(function(){$.ajax(…)})。我只能在这个项目中使用JSF生成的JavaScript。有没有办法在原生JSF中实现这一点?我可以使用哪个事件,或者我可以使用哪个JSF ajax函数 我正在使用JSF2.0、Facelets和PrimeFaces。几种方法 使用。注意,这只在JSF2.3之后才可用 ... 您可以在JS中调用它,如下所示: c

我需要在HTMLDOM
load
事件期间使用ajax执行JSF托管bean操作方法,类似于jQuery的
$(document).ready(function(){$.ajax(…)})
。我只能在这个项目中使用JSF生成的JavaScript。有没有办法在原生JSF中实现这一点?我可以使用哪个事件,或者我可以使用哪个JSF ajax函数

我正在使用JSF2.0、Facelets和PrimeFaces。

几种方法

  • 使用
    。注意,这只在JSF2.3之后才可用

    
    ...
    
    您可以在JS中调用它,如下所示:

    commandName();
    
    commandName({ name1: "value1", name2: "value2" });
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    commandName();
    
    commandName([{ name: "name1", value: "value1" }, { name: "name2", value: "value2" }]);
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    document.getElementById("form:button").onclick();
    
    可按如下方式传递参数:

    commandName();
    
    commandName({ name1: "value1", name2: "value2" });
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    commandName();
    
    commandName([{ name: "name1", value: "value1" }, { name: "name2", value: "value2" }]);
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    document.getElementById("form:button").onclick();
    
    并获得如下结果:

    commandName();
    
    commandName({ name1: "value1", name2: "value2" });
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    commandName();
    
    commandName([{ name: "name1", value: "value1" }, { name: "name2", value: "value2" }]);
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    document.getElementById("form:button").onclick();
    
    要在
    load
    事件期间调用它,请设置
    autorun=“true”

    但是,它不使用JSF native,而是使用PrimeFaces native jQuery(您知道,PrimeFaces是jQuery/UI之上的JSF组件库)

    可按如下方式传递参数:

    commandName();
    
    commandName({ name1: "value1", name2: "value2" });
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    commandName();
    
    commandName([{ name: "name1", value: "value1" }, { name: "name2", value: "value2" }]);
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    document.getElementById("form:button").onclick();
    
    并获得如下结果:

    commandName();
    
    commandName({ name1: "value1", name2: "value2" });
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    commandName();
    
    commandName([{ name: "name1", value: "value1" }, { name: "name2", value: "value2" }]);
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    document.getElementById("form:button").onclick();
    
    要在
    load
    事件期间调用它,请设置
    autoRun=“true”

    您可以在JS中调用它,如下所示:

    commandName();
    
    commandName({ name1: "value1", name2: "value2" });
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    commandName();
    
    commandName([{ name: "name1", value: "value1" }, { name: "name2", value: "value2" }]);
    
    String name1 = externalContext.getRequestParameterMap().get("name1"); // value1
    String name2 = externalContext.getRequestParameterMap().get("name2"); // value2
    
    document.getElementById("form:button").onclick();
    
    注意在出现
    的情况下,触发
    onclick()
    而不是
    click()
    的重要性。
    onclick()
    立即调用
    onclick
    函数,而
    click()
    仅触发元素上的“click”事件,IE不支持该事件。如果您使用的是
    ,则可以安全地使用
    click()

    您可以通过
    以事先由JS填写的相同形式传递参数。这体现在

    Load 事件中调用它,考虑将其放入<代码> <代码>。
    target=“body”
    自动将
    放在
    的末尾,因此不需要
    $(document).ready()
    包装器

    <h:outputScript target="body">
        document.getElementById("form:button").onclick();
    </h:outputScript>
    
    
    document.getElementById(“表单:按钮”).onclick();
    

  • 或者,创建一个自定义的
    UIComponent
    ,它扩展
    UICommand
    ,并生成必要的JSF本机
    JSF.ajax.request()
    调用。例如,您可以查看OmniFaces的示例


  • 想一想这个问题:可能对你有帮助:)@Heppy:不,绝对没有。你是JSF新手吗?谢谢,巴卢斯!这个问题已经用您的secound选项解决了,使用component-remoteCommand,现在它可以100%工作了!