我正在使用<f:event type="preRenderView" listener="#{bean.listener()}"/>
事件。它在页面重新加载(F5)和按下页面上的按钮(呈现表格)时触发。
<a4j:commandButton
value="rerender"
action="#{bean.updateTable()}"
render="myTable" />
我只需要在页面刷新(F5)上调用监听器,而不是在按下按钮时调用监听器。
有办法吗?
FacesContext.getCurrentInstance().isPostback()
无法解决,因为该按钮也是一个POST。
答案 0 :(得分:1)
您无法避免调用侦听器,但在侦听器内部,您可以检查该请求不是帖子而不是AJAX请求。
看看这个: How to differentiate Ajax requests from normal Http requests?
您也可以知道请求方法:
request.getMethod()
如果它不是ajax并且它是GET,那么首次请求该页面,或者使用F5刷新页面。
答案 1 :(得分:0)
我不确定你是否可以完全避免给听众打电话。我认为它是JSF规范的一部分。
你可以解决它。添加一个事件到按钮点击(我猜onclick
),设置隐藏变量buttonClicked
。在您的侦听器中,检查变量。如果已设置,请立即返回。侦听器代码仍应在正常刷新时运行,但在单击按钮时则不会。