【问题标题】:How can be stopped automatic method call from @ManagedBean class at page refresh, JSF如何在页面刷新时停止来自@ManagedBean 类的自动方法调用,JSF
【发布时间】:2016-06-12 16:58:18
【问题描述】:

在我的 XHTML 页面中,我从 @ManagedBean 类中调用了一个方法。仅当我单击链接该方法的链接时才应执行该方法:

  <h:link value="Continue Reading &raquo;" 
       outcome="contracts/resources/data/imag2_facebook.html"  
onclick="#{sessionFilter.incForLink2('contracts/resources/imagini/facebook.jpg','Facebook down? Current problems and status', 'contracts/resources/imagini/facebook.jpg')}" />

奇怪的是为什么每次刷新页面时都会执行该方法而不单击链接。我希望该方法仅在单击链接时执行。我也试过 h:commandLink 但结果是一样的。你知道我需要改变什么,或者有什么问题吗? @ManagedBean 类是应用程序范围的。我调用的方法如下:

public void incForLink2(String link, String title, String imgAllLink) {
    Article article = links.get(link);
    if (article != null) {
        Integer pageHits = article.getPageHits();
        article.setPageHits(pageHits + 1);
        System.out.println(link + " = " + pageHits);
    } else {
        Article article1 = new Article(1, title, link, imgAllLink);
        links.put(link, article1);
    }
}

【问题讨论】:

  • 我必须找到重复项,但这是因为如果您将 EL 包含在操作方法以外的任何其他内容中,则会在页面加载时调用它来呈现 html。 onclick 不是 jsf 意义上的操作方法,(它有点在 html 上下文中)
  • 感谢@Kukeltje 的回答,如果它与 h:commandButton 一起使用,我会尝试更改并返回
  • 或者commandLinkstackoverflow.com/questions/28623664/…也有关系
  • 我尝试过使用 h:commandButton 和 h:commandLink。还是行不通。我刷新页面并自动调用该方法。太奇怪了。

标签: jsf el


【解决方案1】:

onClick 是浏览器中的 JavaScript 处理程序!你调用的Method是Java,在服务器上执行!

Java 在网站被发送到浏览器之前渲染网站,在这个阶段是方法被调用。在发送到 webbrowser 之后,可以执行 javascript,这是第二阶段。您只需要向服务器发出一个新请求即可执行 java 方法。我更喜欢使用a4j:jsFunction

【讨论】:

  • 这正是我提到的副本中所述的内容,还是我遗漏了什么? h:link 是在 JSF 2 中引入的,因此可以使用 f:ajax 来代替早于它的 a4j。并且 afaics 没有必要在这里使用 ajax 调用。 commandLink 就足够了,因为 OP 想要进行页面导航。
  • @Kukeltje 您评论了 2 个可能的重复项,这让我无法通过重复投票。
  • @Kukeltje 它与 h:commandLink 一起使用,我还需要更改页面转发的方式。现在我正在从我的 Java 类进行页面转发,并使用 action 属性从 h:commandLink 调用该方法。感谢您的回答!
  • @FlaviouBodea:请不要接受这样的答案。副本在那里。关于 a4j 东西的答案甚至被 f:ajax 所取代,关于附加请求的东西显然是错误的。应该鼓励人们为重复投票,而不是鼓励人们通过以不太好的方式回答这些问题来获得声誉。
  • @Kukeltje 我没有建议额外执行该方法的请求:我建议执行该方法的新请求而不是该方法的原始请求。即使我也认为应该首选匹配的答案,也尚未找到重复项。否决答案有其自身的含义,不应用于引导 OP 查找重复项。另外,你认为 OP 为什么喜欢做页面导航?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 2017-09-15
  • 2015-03-15
  • 2015-11-14
相关资源
最近更新 更多