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 它会立即起作用。