【问题标题】:PrimeFaces Ajax call only once through the entire applicationPrimeFaces Ajax 在整个应用程序中只调用一次
【发布时间】:2014-09-22 01:25:25
【问题描述】:

我正在开发一个相当大的网络应用程序。突然有一天,primefaces ajax 只运行一次,然后不再运行。

此问题适用于整个应用程序中的所有 primefaces ajax 调用。

我已经尝试了所有方法,甚至尝试使用您在下面看到的代码在 netbeans 中创建一个新的 jsf 项目。同样的,backbean 方法只被调用一次。我可以在 scriptconsolen firefox 中看到调用,但是从不调用 backbean 方法,我没有收到任何错误。

这可能是由什么引起的?如果我用常规的 jsf ajax 替换 primefaces ajax 调用,它就可以工作。

我的一套:

  • NetBeans 7.3
  • JSF 2.2
  • PrimeFaces 3.5
  • GlassFish 3.1.2

我也尝试了以下设置并得到相同的结果:

  • Netbeans 7.4
  • JSF 2.2
  • PrimeFaces 3.5
  • GlassFish 4.0

add() 仅在第一次点击时调用。 豆豆:

package temp;

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "backbean")
@SessionScoped
public class Backbean implements Serializable{

    private int value = 0;
    private int temp = 0;

    public Backbean()
    {

    }

    public void setTemp(int temp)
    {
        this.temp = temp;
    }

    public int getTemp()
    {
        return temp;
    }

    public void add()
    {
       value += temp;
       temp = 0;
    }

    public void setValue(int value)
    {
        this.value = value;
    }

    public int getValue()
    {
        return value;
    }


}

查看:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>

    </h:head>
    <h:body>

            <h:form>
                <h:inputText value="#{backbean.temp}"/>
                <h:outputText value="#{backbean.value}"/>


                <h:commandButton value="Test" type="button">
                   <p:ajax listener="#{backbean.add()}"  update="@form" process="@form" />
                </h:commandButton>
            </h:form>

    </h:body>
</html>

解决方案: 我尝试将 primefaces 3.5 替换为 primefaces 4.0,然后按应有的方式进行 ajax 调用。

为什么?

【问题讨论】:

  • 纯粹出于好奇,您为什么仍在使用 PrimeFaces 3.5? 5.0 是几个月前发布的。
  • 是的,解决方案是使用更高版本的主要面孔,宁愿避免重做取决于 3.5 的图表

标签: ajax jsf primefaces


【解决方案1】:

取决于您在此处尝试实现的目标,如果您想使用 JSF h:commandButton,则将 p:ajax 替换为 f:ajax 并将 action="#{backbean.add()}" 添加到您的 h:commandButton 中(删除了 listenerp:ajax 并将 update 替换为 renderprocess 替换为 execute

如果您想使用 p:commandButton 而不是删除 p:ajax 并将 action="#{backbean.add()}" update="@form" process="@form" 添加到您的 p:commandButton

一般来说: 在 primefaces 组件中使用 &lt;p:ajax 在纯 JSF 组件中使用 &lt;f:ajax

【讨论】:

    猜你喜欢
    • 2021-01-30
    • 2016-05-07
    • 2012-04-24
    • 2012-02-02
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多