PrimeFaces日历未触发日期



我正在尝试通过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,它将立即起作用。

最新更新