【发布时间】:2014-07-07 09:01:24
【问题描述】:
我正在使用 primefaces 5.0 开发 jsf,如果支持 bean 满足条件,我需要将用户重定向到另一个页面。所以我使用p:poll让页面每秒检查一次条件,如果满足条件,将用户重定向到另一个页面。
我创建了一个小项目来尝试这个场景,它使用 poll 来检查 int cnt 是否 >= 10,如果是,则将用户重定向到 welcomePrimefaces.xhtml。另外,还有另一个线程T1,用于简单地增加cnt,这样条件可能会满足一段时间。
这是我所做的:
页面:(没什么特别的,只是每秒轮询一次以检查状态)
<h:form>
Hello from Facelets
<br />
<p:poll interval="1" listener="#{mainBean.checkStatus()}"/>
</h:form>
支持 Bean:
public class MainBean {
private Integer cnt = 0;
@PostConstruct
public void init() {
Thread t1 = new Thread(new T1(), "test");
t1.start();
}
public void checkStatus() {
synchronized (cnt) {
System.out.println("cnt:" + cnt);
if (cnt >= 10) {
try {
Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
Object response = FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect(httpRequest.getContextPath()
+ "/welcomePrimefaces.xhtml");
} catch (IOException ex) {
System.out.println("Error!");
}
}
}
}
private class T1 implements Runnable {
@Override
public void run() {
try {
while (true) {
Thread.sleep(1000);
synchronized (cnt) {
cnt++;
}
}
} catch (InterruptedException ex) {
System.out.println("Thread Error!");
}
}
}
}
结果是 cnt 被打印了 10 次(从 0 到 9),之后,它被库存,甚至没有执行轮询。
那么我的代码有什么问题?请帮帮我。
提前致谢。
【问题讨论】:
标签: jsf redirect jsf-2 primefaces polling