2017-02-24 103 views
0

我想从通过AJAX我的日历的值。Primefaces日历不点火dateSelect

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的建议)

另外,我试图把听者在有和没有parenthesises,似乎并没有做任何的差异。

日历是一个表单标签内。 (有点,如果<div>以上有2层,这是否有所作为?)(https://stackoverflow.com/a/17213127/7591918

任何想法,我应该去调试是怎么回事?作为一个整体,我对Primefaces和JSF相对比较陌生,IDE的控制台和浏览器控制台不会给我任何错误。

谢谢!

回答

0

所以很显然,我的问题是与Spring是如何在内部解决班,或者更确切地说,如何自动生成名称工作,因为我没有明确命名该bean。

listener="#{SimController.newSimFromChanged}" 

改为

listener="#{simController.newSimFromChanged}" 

(注意是小写S)

而现在它的工作原理。

这是非常不直观(IMO),我不知道这是普遍适用的,但我要离开这里了这一点,如果有人有过同样的问题。请注意,这也不会,如果你的类有多个大写字母开头,适用,如果我有一个名为我的SIMController类它会马上工作。

0

在监听的方法不正确拼写。你忘了“新”。

如果你想获得时,不要使用括号。

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

如果不工作,误差必须某处其他。

+0

啊,不,让我解决这个问题。它在我的实际代码中拼写正确,我将它剪下来使它更易于读取StackOverflow。编辑:通过减少它,我不是说我省略了任何东西,我只是改变了函数名称。 – Wep0n

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

DateSelectEvent已弃用,不再被识别/包含在我正在使用的Primefaces版本中。除了我在自己的回答中所说的内容外,我的代码大部分都是正确的。不过谢谢,绝对要研究AjaxBehaviourEvent以备将来参考。 – Wep0n