Primefaces 日历未触发 dateSelect
Primefaces calendar not firing dateSelect
我正在尝试通过 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"
(后者由 建议)
另外,我试过带括号和不带括号的监听器,似乎没有任何区别。
日历在表单标签内。 (有点,如果上面 <div>
有 2 层,这有什么区别吗?) ()
我应该去哪里调试正在发生的事情有什么想法吗?总体而言,我对 Primefaces 和 JSF 比较陌生,我的 IDE 控制台和浏览器控制台没有给我任何错误。
谢谢!
您的侦听器中的方法拼写不正确。你忘了 "new"。
如果您想获取事件,请不要使用括号。
您获得的事件是 DateSelectEvent,因此这应该有效:
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>
在您的 managedBean 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());
}
显然,我的问题是 Spring 如何在内部寻址 classes,或者更确切地说,自动名称生成是如何工作的,因为我没有明确命名 bean。
listener="#{SimController.newSimFromChanged}"
已更改为
listener="#{simController.newSimFromChanged}"
(注意小写的s)
现在可以使用了。
这很不直观 (IMO),我不确定这是否普遍适用,但如果其他人遇到同样的问题,我将把它留在这里。请注意,如果您的 class 以多个大写字母开头,这也不适用,如果我将我的 class 命名为 SIMController
它会立即起作用。
我正在尝试通过 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"
(后者由 建议)
另外,我试过带括号和不带括号的监听器,似乎没有任何区别。
日历在表单标签内。 (有点,如果上面 <div>
有 2 层,这有什么区别吗?) ()
我应该去哪里调试正在发生的事情有什么想法吗?总体而言,我对 Primefaces 和 JSF 比较陌生,我的 IDE 控制台和浏览器控制台没有给我任何错误。
谢谢!
您的侦听器中的方法拼写不正确。你忘了 "new"。
如果您想获取事件,请不要使用括号。
您获得的事件是 DateSelectEvent,因此这应该有效:
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>
在您的 managedBean 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());
}
显然,我的问题是 Spring 如何在内部寻址 classes,或者更确切地说,自动名称生成是如何工作的,因为我没有明确命名 bean。
listener="#{SimController.newSimFromChanged}"
已更改为
listener="#{simController.newSimFromChanged}"
(注意小写的s)
现在可以使用了。
这很不直观 (IMO),我不确定这是否普遍适用,但如果其他人遇到同样的问题,我将把它留在这里。请注意,如果您的 class 以多个大写字母开头,这也不适用,如果我将我的 class 命名为 SIMController
它会立即起作用。