【发布时间】:2012-01-06 08:51:38
【问题描述】:
问题是:actionlistener 不想被解雇
@ManagedBean(name="hotelsController")
@SessionScoped
public class HotelsController implements Serializable {
public void requestHotelAvail(ActionEvent event) {
request = new Request(df.format(arrivalDate), df.format(departureDate));
}
}
和xhtml
<h:panelgroup id="rooms"/>
<h:form id="hotelSearch">
<p:commandButton actionListener="#{hotelsController.requestHotelAvail}" value="submit" update="rooms" />
</h:form>
我已经尝试了所有我能搜索到的将@managedbean 更改为@component 将import 设置为import javax.faces.event.ActionEvent;
但它仍然没有触发任何东西。
表单位于p:accordion 中,与h:commandbutton 一起使用时效果很好
编辑:抱歉误导。单击后房间会更新,但不会触发 actionListener。所以房间不会得到任何新数据。 requestHotelAvail 中的重要代码需要在更新房间之前触发,而不是。
EDIT2:PrimeFaces 2.2.1 - 我已经阅读了 primefaces 的整本手册,但没有任何解释,因为我已经完成了它所说的所有内容
我尝试使用action 代替actionListener 而不使用ActionEvent,但它从来没有做任何事情。使用 <h:commandbutton action="#{hotelscontroller.requestHotelAvail}"/> 效果很好,但我希望 ajax 引擎只刷新 rooms panelgroup
更新:现在可以了。表单不能在<p:accordion> 中,但为什么以及如何在其中启用它?现在形成,没有它我就可以工作。
【问题讨论】:
-
“不触发任何东西”您的实际意思是 1) 未调用该方法(由调试器、记录器或 sysout 确认),或者 2)
roomspanelgroup 未更新? -
不能解决您的问题,但最好将表单组件置于所有其他组件之上,只要它不干扰其他表单(也避免使用内部表单)
-
另外,在该方法中添加一些
sysout's以确保或在该类中创建另一个方法...在服务器日志中没有出现任何内容?比如找不到 bean,或者找不到动作/属性?如果您使用 Netbeans,请确保您的类已正确构建... -
什么 PrimeFaces 版本?尝试使用
action而不是actionListener并删除您无论如何都不会使用的ActionEvent参数。
标签: jsf primefaces