【问题标题】:Invoking parameterised function of javascript from managed bean in jsf从 jsf 中的托管 bean 调用 javascript 的参数化函数
【发布时间】:2013-09-12 06:31:19
【问题描述】:

我已经用谷歌搜索了好几次,但我无法找到解决方案。我想从 jsf 中的 bean 类调用 javascript 函数,我使用以下代码得到它。 RequestContext.getCurrentInstance().execute("handleResize()");
并且工作正常。但我想为该函数的高度和宽度提供两个参数。怎么做到呢 ?请帮忙

【问题讨论】:

  • 可能是RequestContext.getCurrentInstance().execute("handleResize(100, 200)");?
  • 不是静态值。我尝试使用静态值并且它有效。但我想传递动态值。
  • @nik 举个例子。
  • @RongNK like int h=500,w=300; RequestContext.getCurrentInstance().execute("handleResize(h, w)");
  • @nik String str = "handleResize(" + h + "," + w + ")",然后是RequestContext.getCurrentInstance().execute(str)

标签: javascript jsf primefaces javabeans


【解决方案1】:

您似乎没有理解这样一个事实,即在 Java/JSF 的上下文中,所有 HTML、CSS 和 JavaScript 代码都只是普通的 Strings,您似乎期望 HTML/CSS/JS 以某种方式神奇地运行在 Java/JSF 代码中。这不是真的。 Java/JSF 是 HTML/CSS/JS 代码生产者,而不是执行者。网络浏览器将它们全部检索为一个大的String,然后解析并执行它。

如果你想调用一个带有参数的 JS 函数,就像你在真正的 JS 代码中做的那样:

handleResize(500, 300);

并且您将这些值作为 Java 变量,那么您只需要确保您编写 Java 代码的方式与上面的 String 完全相同(同样,这只是 Java 代码,没有 JS 代码):

String call = "handleResize(" + w + ", " + h + ")";

您可以通过将其打印到标准输出/记录器来预先验证:

System.out.println(call);

它必须准确打印所需的有效 JS 函数调用语法handleResize(500, 300);

如果是这样,那么只需将未修改的内容传递给RequestContext#execute()

RequestContext.getCurrentInstance().execute(call);

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 2013-01-24
    • 2011-11-06
    • 2013-03-18
    • 2012-06-19
    • 2011-02-03
    相关资源
    最近更新 更多