Refresh/Redirect 当 p:poll 达到特定条件时来自支持 bean
Refresh/Redirect from backing bean when p:poll reaches certain condition
我正在使用 jsf 实现拍卖系统。
在商品页面中,我有一个倒计时,显示此次促销还剩多少时间。我用 <p:outputlabel value=#{itemBean.timeToEnd()} />
.
显示它
timeToEnd() 方法 returns 格式为:1 天,2 小时.. 等的字符串。
它在该 bean 内的 Date 对象上计算它。
我以 1 秒的间隔用 <p:poll>
更新标签。
我的问题是,当计数器达到 0 秒时,我想刷新整个页面,它会显示销售处于非活动状态。
在timeToEnd()中,我添加了一个逻辑,如果结束日期已过,或者结束秒数为0,则执行以下假设刷新页面的代码:
ExternalContext ec1 =FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());
但是没有刷新页面。
我认为它不会刷新,因为页面 "live" 有一段时间了。 (用户从销售活动开始就在商品页面上)。
关于如何实施的任何想法?
P.S
当我使用 c:set 存储结束日期然后使用 javascript 或其他内容进行视图更新时,我还尝试在客户端级别实现此倒计时。但后来我注意到代码
<c:set var = "enddate" value = "#{itemsBean.endDate}" scope="session" />
每次使用 "enddate" 都会调用服务器,而不是在本地存储日期,然后在不打扰服务器的情况下执行计算。所以我什至没有进入 javascript 部分。
如果有一种在本地实施的方法,我会很高兴听到它。
切勿在 getter 方法中执行 business/controller 逻辑。如果 getter 表示 EL 2.2 直接方法调用,则也不行。毕竟它仍然是一个值表达式,仅在生成 HTML 输出和在呈现响应阶段写入响应 body 期间进行评估。那一刻显然为时已晚,无法设置响应 header(指示客户端执行重定向)。
将该逻辑移至操作(侦听器)方法。
<p:poll ... listener="#{bean.onpoll}" />
public void onpoll() {
// ...
if (someCondition) {
redirect();
}
}
我正在使用 jsf 实现拍卖系统。
在商品页面中,我有一个倒计时,显示此次促销还剩多少时间。我用 <p:outputlabel value=#{itemBean.timeToEnd()} />
.
timeToEnd() 方法 returns 格式为:1 天,2 小时.. 等的字符串。
它在该 bean 内的 Date 对象上计算它。
我以 1 秒的间隔用 <p:poll>
更新标签。
我的问题是,当计数器达到 0 秒时,我想刷新整个页面,它会显示销售处于非活动状态。
在timeToEnd()中,我添加了一个逻辑,如果结束日期已过,或者结束秒数为0,则执行以下假设刷新页面的代码:
ExternalContext ec1 =FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());
但是没有刷新页面。 我认为它不会刷新,因为页面 "live" 有一段时间了。 (用户从销售活动开始就在商品页面上)。
关于如何实施的任何想法?
P.S 当我使用 c:set 存储结束日期然后使用 javascript 或其他内容进行视图更新时,我还尝试在客户端级别实现此倒计时。但后来我注意到代码
<c:set var = "enddate" value = "#{itemsBean.endDate}" scope="session" />
每次使用 "enddate" 都会调用服务器,而不是在本地存储日期,然后在不打扰服务器的情况下执行计算。所以我什至没有进入 javascript 部分。 如果有一种在本地实施的方法,我会很高兴听到它。
切勿在 getter 方法中执行 business/controller 逻辑。如果 getter 表示 EL 2.2 直接方法调用,则也不行。毕竟它仍然是一个值表达式,仅在生成 HTML 输出和在呈现响应阶段写入响应 body 期间进行评估。那一刻显然为时已晚,无法设置响应 header(指示客户端执行重定向)。
将该逻辑移至操作(侦听器)方法。
<p:poll ... listener="#{bean.onpoll}" />
public void onpoll() {
// ...
if (someCondition) {
redirect();
}
}