我正在尝试通过ajax从我的日历中获取一个值。
XHTML部分:
<p:calendar
id="newSimFrom"
value="#{SimModel.from}" <!-- this works -->
showOn="button"
mask="true"
pattern="dd.MM.yyyy"
>
<p:ajax event="dateSelect" process="@this" update="newSimUnt" listener="#{SimController.simFromChanged()}" />
</p:calendar>
控制器:
public void simFromChanged(SelectEvent se) {
log.info("called");
log.info(""+se.getObject());
//this is temporary till I can figure out what's even going on
}
但是我什么都没有,似乎没有任何事件被解雇。我还尝试了event="change"
以及event="select"
和process="@this"
(如https://stackoverflow.com/a/42295586)
另外,我试图在有和没有括号的情况下戴上听众,似乎没有任何区别。
日历在表单标签内。(Kinda,如果上面的<div>
,有两层,这会有所作为吗?)(https://stackoverflow.com/a/17213127/7591918)
我应该去调试发生的事情的任何想法吗?我对PrimeFaces和JSF的整体相对较新,IDE的控制台和浏览器控制台都不会给我任何错误。
谢谢!
侦听器中的方法未正确拼写。您忘记了"新"。
如果您想获得事件,请不要使用括号。
您获得的事件是datelectectevent,所以这应该有效:
xhtml:
<p:ajax event="dateSelect" process="@this" update="newSimUnt" listener="#{SimController.newSimFromChanged}" />
控制器:
public void newSimFromChanged(DateSelectEvent se) {
log.info("called");
log.info("" + se.getDate());
//this is temporary till I can figure out what's even going on
}
如果那不起作用,则错误必须在其他地方。
wep0n,尝试以下示例:
<p:calendar id="newSimFrom" value="#{SimModel.from}"
showOn="button" mask="true" pattern="dd.MM.yyyy">
<p:ajax event="dateSelect" update="newSimUnt"
listener="#{SimController.simFromSelected}" />
<f:ajax event="change" execute="@this" render="newSimUnt"
listener="#{SimController.simFromChanged}"/>
</p:calendar>
以及您的托管simcontroller内部:
public void simFromSelected(DateSelectEvent event) {
System.out.println("DateSelectEvent " + event.getDate());
}
public void simFromChanged(AjaxBehaviorEvent event) throws MWSException {
System.out.println("AjaxBehaviorEvent " + event.getDate());
}
显然,我的问题在于春天如何解决类别,或者是自动名称生成的工作方式,因为我没有明确地命名bean。
listener="#{SimController.newSimFromChanged}"
已更改为
listener="#{simController.newSimFromChanged}"
(注意小写s)
现在起作用。
这是不直觉的(IMO),我不确定这是普遍适用的,但是如果其他人遇到相同的问题,我会在这里离开这里。请注意,如果您的班级从多个大写字母开始,这也不适用,如果我命名了我的类SIMController
,它将立即起作用。