3

スピナーの変更に基づいてフォームを更新しようとしています

<p:spinner id="spin1" min="1" max="#{editPhoto.max}" size="1" 
           value="#{editPhoto.page}" validator="#{editPhoto.validator()}" 
           valueChangeListener="#{editPhoto.refreshForm()}" />
<p:commandButton value="Insert" action="#{editPhoto.insertImage()}"  />
<p:commandButton value="Delete" action="#{editPhoto.deleteImage()}" />

値、setPage、バリデーター、valueChangeListenerにブレークポイントを設定しましたが、commandButtonを押したときにのみブレークポイントに到達します。私はimmediate="true"を試しましたが、何も追加されません。私が本当に望んでいるのは、コマンドボタンを押すことなく、値がいつ変更されたかを知ることです。

前の質問で、BalusCは

<f:event type="preRenderView" listener="#{nextpageBacking.onPreRenderView}" />

ここに似たようなものが必要だと思いますが、どのようなイベントを探すべきですか?そうではないかもしれませんが、commandButtonを押さなくてもスピナーを変更するにはどうすればよいですか?ありがとう、イラン

私のBeanはビュースコープです。おそらく答えは、別のリクエストスコープビーンを使用し、リクエストスコープビーンをビュースコープBeanで動作させることですか?これが正しい方向に見える場合は、これを試してみます。

4

1 に答える 1

4

f:ajaxまたはを使用する必要がありますp:ajax

valueChangeListener は、フォーム全体またはスピナーが送信されたときにのみ発生します。

<p:spinner id="spin1" min="1" max="#{editPhoto.max}" size="1" 
           value="#{editPhoto.page}" validator="#{editPhoto.validator()}">
    <p:ajax listener="#{editPhoto.refreshForm()}" 
            update="@form" process="@this" />
</p:spinner>

valueChangeListenerスピナーの属性は、メソッドを起動するのに最適な場所ではありません。listenerの属性に入れたほうがいいですp:ajax古い値と新しい値に関心がある場合は、valueChangeListener を使用する必要があります。

于 2012-06-06T11:28:51.760 に答える