2017-02-24 11 views
0

私はカレンダーからajax経由で値を取得しようとしています。Primefaceカレンダーが発生しない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 
} 

しかし、私は何を取得、何のイベントが発生していないようにみえます。 (https://stackoverflow.com/a/42295586により示唆されるように後者)私もevent="change"だけでなく、event="select"process="@this"を試してみた

また、私は括弧のとないでリスナーを入れて試してみた、任意の違いを作るためには思えませんでした。

カレンダーはフォームタグ内にあります。 (ちなみに上記の<div>の場合は2つのレイヤーがありますが、違いがありますか?)(https://stackoverflow.com/a/17213127/7591918

何が起こっているのかをデバッグするためのアイデアはありますか?私はPrimefacesとJSF全体が比較的新しいですが、私のIDEのコンソールと私のブラウザコンソールは私にエラーを与えません。

ありがとうございます!

答えて

0

のでどうやら、私の問題は、春には、内部クラス、またはむしろ、どのように自動名前生成をどのように対処するかしていました私はBeanに明示的に名前を付けなかったので動作します。

listener="#{SimController.newSimFromChanged}" 

listener="#{simController.newSimFromChanged}" 

(小文字の点に注意してください)

に変更し、今では動作します。

これはかなり直感的ではなく(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 
} 

問題が解決しない場合は、エラーがどこかでなければなりませんelse。

+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は廃止され、使用しているPrimefaceのバージョンには認識されなくなりました。自分の答えで言ったことを除いて、私のコードはほとんど正しい。おかげさまで、AjaxBehaviourEventを今後の参照のために見ていきます。 – Wep0n

関連する問題