【问题标题】:JSF: calling javascript code from Managed Bean not working when forcing page reloadJSF:强制页面重新加载时从托管 Bean 调用 javascript 代码不起作用
【发布时间】:2015-09-06 11:47:59
【问题描述】:

我需要从 JSF Managed Bean 的方法执行 JavaScript 代码,该方法基本上是单击 facelet(.xhtml 文件)上的按钮。所有这一切都可以通过使用 PrimeFaces 的 RequestContext.execute("{js here}") 完美地工作,但是当使用 ExternalContext 添加一些“页面重新加载”代码行时它不再工作... (请参阅下面的代码)。似乎“页面重新加载”行阻止了 JavaScript 代码的执行。欢迎任何提示!

public void myMethod() throws IllegalStateException, Exception {

    RequestContext rc = RequestContext.getCurrentInstance();.           

    rc.execute("$('#myButton').click();");

    try {
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());

    } catch (IOException e) {
        log.error("Error", e);
    }

【问题讨论】:

    标签: javascript jquery jsf jsf-2 primefaces


    【解决方案1】:

    RequestContext 用于当前请求,重定向是另一个请求。它不能工作。

    尝试做这样的事情:

    RequestContext rc = RequestContext.getCurrentInstance();
    rc.execute("$('#myButton').click(); window.location = newURL;");
    

    【讨论】:

    • 您好 Rostislav,感谢您的提示!只是一个问题:由于我需要重新加载同一页面,我不应该使用 window.location.reload(true) 吗?
    • 我认为你有一个方法调用是通过单击某个按钮触发的,所以尝试打开 AJAX 并且页面会自动重新加载。对于 primefaces 按钮,请使用 ajax="false" 属性。
    • 您好 Rostislav,谢谢,我会试一试。最佳爱德华多
    • @ekremer:请接受答案。这是正确和有效的。其他用户可以更轻松地找到它
    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 2011-03-31
    • 2013-01-24
    • 2013-03-31
    • 1970-01-01
    • 2018-05-21
    相关资源
    最近更新 更多