2017-08-03 3 views
0

ユーザーがinputTextフィールドをクリアしたことを検出できるようにするには、リスナー関数が必要です。テキストフィールドに新しい文字列が入力されると、バッキングBeanの値がすぐに更新され、リスナー関数が呼び出されますが、デバッグでは文字列がクリアされたときにバッキングBean変数がnullに設定されていませんリスナーが戻ってくるまで。リスナー関数は(backingBeanvariable == null)テストに依存するため、これは私の機能にエラーを引き起こしています。これを回避する方法はありますか?JSF ajaxリスナーは、テキストフィールドが空であることを知る必要があります

マイXHTML:

<p:column> 
    <p:inputText id="inputText" value="#{backingBean.variable}" 
     title="someTitle"> 
     <p:ajax resetValues="true" listener="#{backingBean.onChange()}" /> 
    </p:inputText> 
</p:column> 

バッキングBeanのリスナー関数:

public void onUiiTypeChange() 
{ 
    if (variable == null) 
    { 
     // some logic 
    } 
} 

EDIT:フィールドがクリアされたときに変数がNULL以外reather空の文字列に設定されるかもしれません。いずれにしても、これはリスナー関数が返されるまで発生しません。すなわち、フィールドがクリアされる前に "asdf"が含まれていた場合、リスナー関数が呼び出されたときに変数は "asdf"に設定されます。

+0

参考までに、ご使用のサンプルが正しくセットアップされているため、再現できません。リスナーが呼び出された後にフィールドがnullに更新されたことをデバッグして見たが、変数が空の文字列(デフォルトの動作)に設定されている可能性があることに気づいたので、不一致があるようです。だから、より徹底的なデバッグが何が起こっているかを教えてくれる可能性があります。 – kingdc

+0

http://www.stackoverflow.com/tags/jsf/infoでリクエストされているように、PFとJSFのバージョンを追加してください。 – Kukeltje

答えて

0

p:ajaxタグには、ユーザーが入力フィールドとやりとりしたときにリッスンするイベントが必要です。これは、p:ajaxタグの属性eventをリスナー値に設定することで実行できます。 event属性のこれらの受け入れられた値を知るために、このanswered questionを指摘します。

あなたのFacelets:パラメータとしてAjaxBehaviorEventを受け入れ、リターンはあなたがそこにあなたのロジックを置く無効にBeanのメソッドで今すぐ

<p:column> 
    <p:inputText id="inputText" value="#{backingBean.variable}" 
     title="someTitle"> 
     <!--added attribute event--> 
     <p:ajax resetValues="true" listener="#{backingBean.onChange()}" event="onblur"/> 
    </p:inputText> 
</p:column> 

: 例えば

public void onChange(AjaxBehaviorEvent event){ 

    //there are other ways to do this 
    String[] array = yourValue.split(" "); 
    //do something if array length satisfies your condition 
    //etc 
} 

最も重要なことはしていますJSFEMPTY STRINGNULL STRINGと等しくないことに注意してください。これがデフォルト設定です。あなたが必要とする切り札にに断固さらにより

<context-param> 
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> 
    <param-value>true</param-value> 
</context-param> 

であなたのweb.xmlファイルにJSFとサーバのバージョンが役割を果たしていることを示しています。 reference here

0

私はわかりませんが、変数をユーザーのリセット後に空の文字列ではありません。この方法でvariable.equals("")をチェックする必要があります。

+0

正しく設定されている可能性があります。空の文字列ではなくnullですが、リスナー関数が返されるまで設定されません。 –

関連する問題