我正在开发一个相当大的Web应用程序。突然,前几天,ajax只能锻炼一次,然后不再工作。
此问题适用于ajax通过整个应用程序调用的所有主要表面。
我已尝试过所有内容,甚至尝试使用您在下面看到的代码在netbeans中创建一个新的jsf项目。同样的事情,backbean方法只调用一次。我可以在scriptconsolen firefox中看到调用,但是从不调用backbean方法,我没有错误。
这可能是由什么引起的?如果我用常规jsf ajax替换primefaces ajax调用,它就可以工作。
我的设置:
我也试过以下一组并得到相同的结果:
add()仅在第一次点击时调用。 Backbean:
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调用。
为什么吗
答案 0 :(得分:1)
取决于您在此处尝试实现的目标,如果您想使用JSF h:commandButton
,请将p:ajax
替换为f:ajax
,并将action="#{backbean.add()}"
添加到h:commandButton
(从listener
移除p:ajax
)并将update
替换为render
,将process
替换为execute
如果您要使用p:commandButton
而不是删除p:ajax
并将action="#{backbean.add()}" update="@form" process="@form"
添加到p:commandButton
一般情况下:
在primefaces组件中使用<p:ajax
并在纯JSF组件中使用<f:ajax