Primefaces日历不会触发dateSelect

时间:2017-02-24 13:04:42

标签: jsf primefaces jsf-2

我试图通过ajax从我的日历中获取值。

xhtml部分:

public class ExternalClass
{
   public string EXproperty1 { get; set; }
   public string EXproperty2 { get; set; }
   public string EXproperty3 { get; set; }

   public ExternalClass() { }
}

public class NewClass:ExternalClass
{            
    public string NewProperty1 { get; set; }
    public string NewProperty2 { get; set; }
    public NewClass() { }          
}

控制器:

<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"(后者按照https://stackoverflow.com/a/42295586的建议)

另外,我试图在没有括号的情况下开启听众,似乎没有任何差异。

日历位于表单标记内。 (有点,如果process="@this"以上有2层,那会有所不同吗?)(https://stackoverflow.com/a/17213127/7591918

我应该去哪些想法来调试发生了什么?我对Primefaces和整个JSF都比较陌生,我的IDE控制台和我的浏览器控制台都没有给我任何错误。

谢谢!

3 个答案:

答案 0 :(得分:0)

听众中的方法拼写不正确。你忘记了&#34; new&#34;。

如果您想让活动不使用括号。

你得到的事件是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
}

如果这不起作用,则错误必须在其他地方。

答案 1 :(得分:0)

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());
}

答案 2 :(得分:0)

所以显然,我的问题在于Spring内部如何处理类,或者更确切地说自动名称生成是如何工作的,因为我没有明确地命名bean。

listener="#{SimController.newSimFromChanged}"

已更改为

listener="#{simController.newSimFromChanged}"

(注意小写s)

现在它有效。

这是非常不直观的(IMO),我不确定这是否普遍适用,但如果其他人遇到同样的问题我会留在这里。请注意,如果您的班级以多个大写字母开头,这也不适用,如果我已将我的班级命名为SIMController,那么它会立即起作用。