【问题标题】:javascript call methods of managed bean on start-up and doesn't call them on command button clickjavascript在启动时调用托管bean的方法,而不是在命令按钮单击时调用它们
【发布时间】:2015-05-10 17:58:40
【问题描述】:

我正在开发一个使用 JSF、Maven、Spring-Data 框架和 Neo4J 图形数据库的 Web 应用程序项目。

这是我工作中的一个示例 JSF 页面

// JSF Sample Page
…
<h:commandButton value="button" onclick="fun(#{bean.doWork()})" />
…

以及我工作中的一个示例 JavaScript 页面

// JavaScript Sample Page
…
function fun (var_value) {
…
}
…

以及我工作中的示例托管 Bean 类

// Managed Bean Sample Class
…
public int doWork() {
…
}
…

问题是: JavaScript在启动时调用托管bean的方法(我不知道为什么)。

最大的问题是: JavaScript 不会在命令按钮单击时调用托管 bean 的方法。

注意: 单击命令按钮时,它会调用 JavaScript 函数,但不会调用托管 bean 的方法,而是使用在启动时通过调用托管 bean 的方法加载的数据

另一个注意事项: 在命令按钮上调用托管bean的方法时直接单击而不使用JavaScript函数它工作正常并且不会在启动时调用托管bean的方法(似乎这是我问题的解决方案,但我必须使用JavaScript)

【问题讨论】:

  • 这个 JavaScript 函数 function fun (var) {...} 中的 var 是什么?它是一个保留关键字,不能用作变量名。观察浏览器控制台是否有任何 JavaScript 错误。这个Java方法不是语法(syntactic)Public int doWork() {...}。它不会编译。注意这里开头Public的大写(P)。
  • @Tiny 对不起,我已经更新了我的问题,写得不好不是语法错误

标签: javascript jsf spring-data managed-bean


【解决方案1】:

当您的页面加载时,bean 函数将被调用,它会用返回值填充您的 JavaScript。如果您查看页面的来源,您可以检查。之后,当页面加载时,如果点击按钮,它将使用旧值,不会再次调用 bean 方法。您需要先更新/渲染该部分脚本以更新值,然后调用 JS 方法。 我希望我不会太困惑......

示例:

//JSF page

<p:commandButton value="button" action="#{bean.doWork}" update="script" oncomplete="fun()" />
<h:panelGroup id="script">
  <script>
    function fun () {
     var var_value = #{bean.workResult}; 
     …
    }
  </script>
</h:panelGroup>


//Bean

 private int workResult = 0; //so it doesn't report error at the beggining
 public int getWorkResult() { return workResult; }
 public void doWork() {
   …
   workResult = valueYouWouldReturn;
 }

【讨论】:

  • 我知道,但我不想在启动时加载这些方法,这会使 Web 应用程序太慢。另外,如何在命令按钮单击时更新/呈现 JavaScript?
  • 我编辑了我的答案,你可以试试类似的。
  • 有效,请参考问题中的第二个注释,我必须使用javascript
  • 如果您通过“我必须使用 javascript”表示您不想刷新页面,那么您可以将 h:commandButton 更改为 a4j、primefaces 或 richfaces 按钮(如果您使用的东西)。您不能只从 JavaScript 代码中调用 bean 函数。 JS在你的客户端,bean在服务器,所以你需要发送一些请求来获取值。
  • 很遗憾,我需要刷新页面,我需要至少每5分钟刷新一次
猜你喜欢
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多