4

私はしばらくの間、Jquery を使用して JSF2 に取り組んできました。JSF2 を使用した非表示フィールドの入力に問題があります。私はそれがこのようにできることを知っています

<h:inputHidden id="a" value="#{backingBean.a} />

これは問題なく動作しますが、唯一のことは、バッキング Bean で「a」のゲッターとセッターを作成する必要があることです。しかし、別のパラメーターを渡してバッキング Bean メソッドを呼び出したいと思います。これにより、「inputHidden」に設定する必要がある出力値が返されます。こんな感じで使ってみました

<h:inputHidden id="a" value="#{backingBean.populateA(b)} />

しかし、このコードを使用すると、ブラウザー コンソールに警告が表示され、使用法が正しくないという警告が表示されます。パラメータを持つバッキング Bean メソッドは、のように「アクション」属性内で呼び出す必要があることを理解しています<h:commandButton>。JSF2 または Jquery を使用して隠しフィールドに何かを使用するにはどうすればよいですか?

ページの読み込み時にこの入力非表示フィールドに入力する必要があることに注意してください。それができるかどうかわからない。

お時間をいただきありがとうございます。

4

2 に答える 2

1

テーマの詳細

「値ホルダー」として機能するように設計されたすべてのタグ、つまり<h:inputText>や などのタグは、インターフェイスを実装するクラス<h:selectOneMenu>によってバックアップされます。リクエスト値の適用フェーズでは、ユーザーが送信した値がリクエスト パラメータから抽出され、 によって適切なコンポーネント クラスの送信値として設定されます。必要に応じて、 を使用して値を事前に変換します。UIInputEditableValueHolderUIInput#setSubmittedValueConverter#getAsObject

次に、すべての「値ホルダー」コンポーネントはvalue、コンポーネントの値をバッキング Bean のプロパティと双方向にバインドする属性を提供します。たとえば、バインディングが の形式のvalue="#{bean.prop}"場合bean.getProp()、コンポーネント値を Bean プロパティから更新する必要があるときに呼び出され、モデル値の更新フェーズでモデル値を更新するときに派生元bean.setProp(value)で呼び出されます。valueUIInput#getValue()

全体として、UIInputコンポーネントには、適切な JSF タグの属性を介した Bean プロパティとの双方向バインディングが必要です。valueこのバインディングは、値式を介してモデル層のデータへのアクセスを提供します。value="#{bean.prop}"これにより、フォームタイプの値バインディングが残ります。

何らかの方法に基づくプロパティの人口

ユーザーが送信した直接の値ではなく、何らかの方法で変更された値を使用して Bean プロパティを設定する場合、基本的には次のようになります。

  1. を提供し、Converterおよび の Bean プロパティとコンポーネント値の間で 1 対 1 のマッピングをConverter#getAsObject行いConverter#getAsStringます。converterタグの属性などでコンバーターを指定することを忘れないでください。通常の参照ポイントとして、 Communication in JSF 2.0を参照できます。
  2. と のように、getter/setter ペアでコンバーター型の変換をpublic String getProp(String s) { return modifyPropValue(this.prop); }行いpublic void setProp(String s) { this.prop = modifyCompValue(s); }ます。ただし、それを行うことは強くお勧めしません。
  3. フォームの送信中にアクション (リスナー) メソッドで変換を行います。このために、dummyPropBean プロパティを使用してダミーのバインディングを作成this.prop = modifyCompValue(dummyProp)し、アクション (リスナー) メソッドで実行できます。また、ダミーのプロパティを持つことは冗長であり、必要なリクエスト パラメータに 経由でアクセスできることにも注意してくださいFacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")。実際、別の回答で提案されている解決策は、この変換の特殊なケースであり、アクション メソッドの唯一のものは変換された値の母集団です。
于 2013-04-09T15:36:38.827 に答える
1

非表示のコマンド ボタンを使用して値をメソッドに渡す

<h:commandButton value="Print" id="someButton" style="visibility: hidden;"
                    action="#{backingBean.populateA(b)}">
  <f:ajax execute="@this" render="a"/>
</h:commandButton>

出力を受け取る隠し入力

<h:inputHidden id="a" value="#{backingBean.a} />

目的のイベントが発生したときに jQuery を使用してボタンをクリックします。

于 2013-04-09T09:51:18.783 に答える