在事件本身之前到达JSF Ajax监听器

时间:2012-02-16 14:01:42

标签: ajax jsf-2

我正在试图找出ajax的标签'listener'属性,以及我读到的here

  

使用listener属性连接到ajax事件的ajax侦听器是每次发出ajax请求时都会调用的方法

这正是我正在寻找的。我也尝试了该网页上的第一个代码示例,它按预期工作。 但是,当我添加以下代码 -

<h:commandButton id="d" image="#{CodeBean.imgSrc}"  action="#{CodeBean.clickImg()}">
      <f:ajax event="action" render="d"  listener="#{CodeBean.update}" />
</h:commandButton>

调用'clickImg'和'update'函数(并且'clickImg'执行其任务),但'clickImg'之前正在执行'update'(我已经添加到两个函数'System.out中)。的println(...)“)。是的 - 在该示例代码中,“更新”正在'setHello'之后执行 这对我没有意义 - 或者我错过了什么? 干杯, 埃雷兹

2 个答案:

答案 0 :(得分:1)

这完全符合规范。在调用操作阶段期间,在操作之前调用操作侦听器。如果您需要执行业务操作和/或导航,请在action中执行。如果您需要监听操作事件,以便在必要时进行一些预处理,请使用listener

在您的特定情况下,看起来您根本不需要动作侦听器。只需将其删除并将作业移至action方法即可。 event属性是多余的。它已默认为action。只需删除它。这同样有效:

<h:commandButton image="#{CodeBean.imgSrc}" action="#{CodeBean.clickImg}">
    <f:ajax render="@this" />
</h:commandButton>

另见:

答案 1 :(得分:0)

在你看过的示例中,setHello是h:inputText值的setter,而不是代码中的动作,这就是你错过的... 这就是为什么在这个例子中,在ajax监听器之前调用了setter ...