如何从页面刷新(F5)识别回发,而不是按下按钮?

时间:2017-04-19 15:56:34

标签: jsf

我正在使用<f:event type="preRenderView" listener="#{bean.listener()}"/>事件。它在页面重新加载(F5)和按下页面上的按钮(呈现表格)时触发。

                    <a4j:commandButton
                        value="rerender"
                        action="#{bean.updateTable()}"
                        render="myTable" />

我只需要在页面刷新(F5)上调用监听器,而不是在按下按钮时调用监听器。

有办法吗?

FacesContext.getCurrentInstance().isPostback()无法解决,因为该按钮也是一个POST。

2 个答案:

答案 0 :(得分:1)

您无法避免调用侦听器,但在侦听器内部,您可以检查该请求不是帖子而不是AJAX请求。

看看这个: How to differentiate Ajax requests from normal Http requests?

您也可以知道请求方法:

request.getMethod()

如果它不是ajax并且它是GET,那么首次请求该页面,或者使用F5刷新页面。

答案 1 :(得分:0)

我不确定你是否可以完全避免给听众打电话。我认为它是JSF规范的一部分。

你可以解决它。添加一个事件到按钮点击(我猜onclick),设置隐藏变量buttonClicked。在您的侦听器中,检查变量。如果已设置,请立即返回。侦听器代码仍应在正常刷新时运行,但在单击按钮时则不会。