我对
我创建了一个小例子来帮助理解。其中,我有:
- 一个
理论上,所有访问此页面的用户应该具有相同的
但事实并非如此。显然,当通过Ajax进行更新时,它会像一个
当我更改
我只能在浏览器中进行REFRESH,并对页面进行完全的REFRESH才能更新
有人遇到过类似的问题吗?
@ApplicationScope
在Ajax请求时的操作有些困惑。我创建了一个小例子来帮助理解。其中,我有:
- 一个
slider
改变了一个被称为sliderValue
的变量,在一个@ApplicationScope
的ManagedBean中设置该值,该值由Ajax设置。
- 一个poll
,它更新panelGrid
以始终获取sliderValue
的更新值,更新是通过Ajax完成的。理论上,所有访问此页面的用户应该具有相同的
sliderValue
值,如果一个用户更改了滑块的值,其他所有用户都应该接收到更改,对吗?但事实并非如此。显然,当通过Ajax进行更新时,它会像一个
@SessionScope
的ManagedBean一样行事。当我更改
sliderValue
的值时,它在ManagedBean中被正确地更改,但其他用户通过poll
执行的更新没有接收到更新。我只能在浏览器中进行REFRESH,并对页面进行完全的REFRESH才能更新
sliderValue
的值。有人遇到过类似的问题吗?
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Menu</title>
</h:head>
<h:body>
<h:form prependId="false" id="form1" >
<h:panelGrid id="panelGrid1" columns="1" style="margin-bottom: 10px">
<p:inputText id="txt1" value="#{menuManagedBean.sliderValue}" />
<p:slider id="slider1" for="txt1" >
<p:ajax event="slideEnd" process="txt1" />
</p:slider>
</h:panelGrid>
<p:poll id="poll1" widgetVar="varPool1" async="true" autoStart="true" interval="2" update="panelGrid1" />
</h:form>
</h:body>
</html>
MenuManagedBean.java
import java.io.Serializable;
import java.util.Date;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
@ApplicationScoped
@Named(value = "menuManagedBean")
public class MenuManagedBean implements Serializable {
private int sliderValue;
public MenuManagedBean() {
}
public int getSliderValue() {
System.out.println(new Date() + " - get: " + sliderValue);
return sliderValue;
}
public void setSliderValue(int sliderValue) {
this.sliderValue = sliderValue;
System.out.println(new Date() + " - set: " + sliderValue);
}
}