2010-12-13 13 views
2

これは問題です.JSFの検証では、フィールドを最後の既知の値に戻し続けます。UIInputコンポーネントのJSF検証をバイパスします

バッキングBeanに既に値が設定されているページを編集しています。 (頻度= "毎週")

そして、値が検証に合格しなくても、デフォルト値の「選択してください」を表示する必要があります(はい、私はちょうどエラーメッセージ)。

「選択する」を選択して最後の良好な値にリセットする方法はありませんか?

ユーザーは明らかに保存することはできませんが、無効な値を選択したままにします。

  1. ユーザーは、ユーザーが正常に保存されます
  2. ドロップダウンから適切な値を選択し、新しいオブジェクトを追加します。
  3. ユーザーがクリックし、「編集」と表示され、既知の値で
  4. ユーザーが「週刊は」
  5. ユーザーのクリックを保存「を選択する」に変更(「週刊」)オブジェクト
  6. 検証メッセージが表示される(良い)が、周波数が行きます

immediate = "true"はinputComponentsでは機能しません。ただし、 "weekly"の最後の値に戻っています(悪い、私はそれを選択してください。コマンドコンポーネント。

答えて

3

I recog私はこれを1年以上前にJSF issue 1299と報告しました。優先順位が低いため、これは解決されません。これはすべてのUIInputコンポーネントに固有のものではなく、<select>要素のレンダリングを担当するMenuRendererです。他のすべてのHTML入力要素は期待どおりに動作し、提示された値が再表示されます(実際はまったくありません)。

すでにJSF 2.0を使用しているので、少しの助けを借りてf:ajaxを使用してこの問題を解決することをお勧めします。ドロップダウンは再レンダリングされず、その選択が維持されます。

<h:selectOneMenu id="frequency" value="#{bean.frequency}" required="true"> 
    <f:selectItems value="#{bean.frequencies}" /> 
    <f:ajax render="frequencyMessage" /> 
</h:selectOneMenu> 
<h:message id="frequencyMessage" for="frequency" /> 

さらに、エンドユーザーは瞬時にフィードバックを得ることができるため、ユーザーの利便性が向上します。

+0

ありがとうございました! 私はこれをちょっと試してみましたが、ユーザーが「送信」をクリックすると値は戻ってしまいます。それとも、ページ全体がサブミット後にレンダリングされたときにレンダリングされますか(私はそう思わないでしょう) – Eddie

+0

それにもajaxを使用してください。必要なら 'ids'に' render'と一緒に 'h:commandButton'の中に' 'を入れてください。 – BalusC

+0

これはライブフィードバックの便利なトリックであり、間違いをすぐに表示します。 でも、私のコマンドボタンのajaxでrender = "messageList"(私はボタンの上にある単一のメッセージボックスを使用します)を保存するアクションは、メッセージリストをまだ有効化前の値に戻します。 ..... 「この値は必須で、設定されていない場合は前の値に戻ります」というライブメッセージを作成することもあります – Eddie

関連する問題