1

h:SelectOneMenu コントロールを含む標準の JSF h:form があります。ページがレンダリングされるときに入力されるリストから項目を選択している限り、完全に機能します。重要ではないと思いますが、コンテキストに入れると、select からの値を使用して、一致するレコードのリストを返すクエリが作成されます。

コントロールに JQuery オートコンプリート ボックスを実装しましたが、元の値のいずれかを選択している限り、問題なく動作します。

ページのレンダリング時に選択コントロールにない値を入力すると、問題が発生します。JQueryを使用して、リストにない値が入力されたときに、その値が新しいオプションとして選択に追加されるように設定しました。

オプションが基になる選択コントロールに追加され、javascript を介して選択されていることを確認できます。ただし、その直後にバッキング Bean でセッターが呼び出されると、セッターに渡される値は null であり、クエリを実行する関数に到達することはありません。AJAX 応答で次のエラーが返されますが、値が検証される場所をまだ見つけることができません。これも必須フィールドではありません。

検証エラー: 値が無効です

これが私のフロントエンドコードです:

   <h:selectOneMenu id="make" styleClass="combobox" value="#{listBean.make}" 
                     effect="fade" label="#{listBean.makeLabel}" >
      <f:selectItems value="#{listBean.makeList}" />
   </h:selectOneMenu>

そして、Bean のセッター:

    public void setMake(String make) {
       this.make = make;
    }

バッキング Bean の makeList リストに新しいオプションを含める方法を見つける必要があるだけだと思いますが、その方法がわかりません。ヘルプや提案をいただければ幸いです。

Java EE 6、GlassFish 3.1、Eclipse 3.7 - FireFox と Chrome の両方で問題が発生

4

1 に答える 1

1

<f:selectItems>動的に追加された項目は、JavaScript ではなく で提供する必要があります。アイテムが に存在しない場合、<f:selectItems>まさにこの検証エラーが発生します。これは、サーバー側に不正な/提供されていない値を取得しようとする試みで、改ざん/ハッキングされた要求に対する保護の一部として行われます。

JSF コンポーネント ライブラリを使用する方が簡単です。たとえば、PrimeFaces には<p:autoComplete>、正確な目的のための があります。

于 2012-07-13T03:38:02.713 に答える