2012-03-13 9 views
1

カーソルが入力にある「テスト」とユーザプレスはJSF 2、AJAX入力フィールドは、Firefox 10とIE9に異なる動作

<h:form> 
<h:inputText id="test" value="#{myModel.someValue}" > 
    <f:ajax event="blur" execute="@this" listener="#{myBean.calculateStuff}" render="myText"/> 
</h:inputText> 

<h:outputText id="myText" value="#{myModel.myText}" /> 

<h:commandButton value="send" action="#{myBean.calculatedNextPage} "> 

</h:form> 

Firefoxは1提出すなわち呼び出し、送信を呼び出すように簡略化された形式でキーを入力します部分的な要求。

この動作は問題ありませんか?アプリケーション側からは、クライアント/サーバー側で複数の要求に対して予防/検出が行われるため、迷惑です。

フィールドの検証/変換に失敗し、両方のブラウザで "myText"が更新されないことがある場合は、事前に結果を知ることができません。提出を防ぐEnterキーチェックは望ましくなく、通常の場合は「ぼかし」が良いです。両方のブラウザが同じように動作するようにするにはどうすればよいですか?

答えて

0

この動作は実際には望ましくありません。しかし、ブラウザ全体としてのMSIEもそれ自体ではありません。それはあなたがウェブ開発者として扱わなければならないものです。 Firefox/Chrome/Safari/etcは、送信イベントが発生したときにblurイベントを正しくスキップします。

唯一の目的は、someValueの変換/検証であれば、ajaxリスナーメソッド内ではなく、通常のコンバーターやバリデーター内で行う必要があります。

<h:inputText id="test" value="#{myModel.someValue}"> 
    <f:converter converterId="someValueConverter" /> 
    <f:validator validatorId="someValueValidator" /> 
    <f:ajax event="blur" execute="@this" listener="#{myBean.calculateStuff}" render="myText"/> 
</h:inputText> 

このようにして、「不要な」ajaxリクエストを無視しても問題ありません。

しかし、あなたが本当にハード頭を持っている場合、あなたはあなたの特定の例では常にonblurをスキップするonsubmitハンドラを追加することができます。

<h:form id="form" onsubmit="document.getElementById('form:test').onblur=null"> 
+0

「myText」(h:outputText)に計算された値を表示することです。これは、myModel.someValueフィールドから呼び出されたアプリケーションフェーズで計算されます。返信いただきありがとうございます。 – user1267541

関連する問題