【问题标题】:@PostConstruct in @ViewScoped bean invoked on every <p:ajax> request [duplicate]在每个 <p:ajax> 请求上调用 @ViewScoped bean 中的 @PostConstruct [重复]
【发布时间】:2015-12-03 06:09:08
【问题描述】:

我正在使用 JSF2.2 和 PrimeFaces 5.2,我有一个通过

发布请求的 chackbox 列表
<p:ajax  listener="#{packageListBean.filterResults()}" update="@form" process="@this"/>

每次发布​​时都会调用 be 的 @PostConstruct 方法,但不会调用侦听器。

bean 用 :

注释
import javax.faces.view.ViewScoped;
import javax.inject.Named;

这很奇怪,因为我希望 @PostConstruct 方法只在页面的第一个 GET 请求时被调用。

在 BalusC 评论之后添加:

我像这样包含 jquery:

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />

如果我通过 f:ajax 发出请求,那么代码可以正常工作,并且只调用一次 @PostConstruct 并且还会调用侦听器。

这是使用 p:ajax 发出的请求

POST /index.jsf HTTP/1.1
Host: cloudflow-backend-local.arctur.net:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: application/xml, text/xml, */*; q=0.01
Accept-Language: sl,en-GB;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Faces-Request: partial/ajax
X-Requested-With: XMLHttpRequest
Referer: http://cloudflow-backend-local.arctur.net:8080/index.jsf
Content-Length: 280
Cookie: lng=sl; **************.*****
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

这是由 f:ajax 发出的请求

POST /index.jsf HTTP/1.1
Host: cloudflow-backend-local.arctur.net:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: sl,en-GB;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Faces-Request: partial/ajax
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Referer: http://cloudflow-backend-local.arctur.net:8080/index.jsf
Content-Length: 498
Cookie: lng=sl; ****************.*******
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

【问题讨论】:

  • 那么,HTTP 会话没有维护?
  • 如果我使用 f:ajax 而不是 p:ajax 则不会调用 @PostConstruct 方法并且还会调用侦听器,但我想知道为什么?这是 primefaces p:ajax 中的错误吗?
  • 那么,您是手动包含 jQuery 吗?您是否按照stackoverflow.com/tags/jsf/info 中的说明检查浏览器控制台以获取线索?
  • @BalusC 我已经更新了问题,浏览器控制台没有错误,当从 p:ajax 或 f:ajax 调用时,我还在问题中包含了请求标头数据
  • 不确定这是否会有所帮助,但我认为p:ajax 应该使用update="@(form)" 而不是update="@form"(注意括号)。

标签: jsf primefaces view-scope postconstruct


【解决方案1】:

您的托管 bean 是否真的被注释为 ViewScope?您只显示导入而不显示注释,在这种情况下,如果没有找到范围注释,则您的托管 bean 是请求范围。

【讨论】:

  • 是的,我的 bean 使用 javax.faces.view.ViewScoped 进行了注释,并且是 CDI bean 而不是托管 bean,我还发现如果我使用 f:ajax 而不是 p:ajax 它可以工作好的...这是主要面孔中的错误吗?
  • 这应该是评论而不是答案。
猜你喜欢
  • 2011-02-20
  • 2014-10-17
  • 2011-07-29
  • 2014-03-21
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多