我正在试图找出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'之后执行 这对我没有意义 - 或者我错过了什么? 干杯, 埃雷兹
答案 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 ...