2

Oracle ADF で作成されたアプリケーションがあります。

その中に、VARCHAR列にマップするチェックボックス列を追加する必要があるテーブルがあります。

実際の属性を適切に設定する一時的なブール属性をビュー オブジェクトに作成しました。このセットアップは、私のビジネス コンポーネント テスター/ブラウザーで完全に機能します。ただし、私のJSPXでは、一時属性に基づいてチェックボックスを取得するテーブル列は、データを取得または設定しません。

このセットアップは、このブログで示されているとおりに行われます: Oracle ADF のテーブル コンポーネントにブール チェックボックスを追加します。たとえば、私の実際の属性 (varchar/string) は isCurrent と呼ばれます。isCurrentBoolean (Boolean データ型) という名前の一時的な列を作成しました。これにはそれぞれチェックボックス プロパティが設定されています。行実装クラスを使用して、両方の属性を適切に設定しました。これは、ADF ビジネス コンポーネント テスター/ブラウザで完全に機能します。

ただし、JSPX ページの私のテーブルでは、チェックボックスが有効になっているレコードがチェックされているように表示されません。そして、データを設定しようとすると、コミットプロセスが期間を実行しません(エラーはなく、文字通り実行されません)。

何か案は?

ありがとうございました!

更新 01:

string/varchar 属性に基づいて一時的なブール属性が適切にデータを取得していますが、現在は設定データ部分だけが機能していません。

Row 実装クラスでは、IsCurrentBoolean のセッターが実行されるたびに発生するメッセージを追加しました。チェックボックスがチェックされているときは発火しません。autosubmit を true に設定しました。他にできることがあるかどうかを確認しますが、回避策として、アプリケーション モジュールにメソッドを追加し、チェックボックスの値変更リスナーでそれを起動するだけです。

JSPX コード:

<af:column sortProperty="IsCurrentBoolean" sortable="false" 
    headerText="Current?" id="c2" width="50">
<af:selectBooleanCheckbox value="#{row.IsCurrentBoolean}" id="sbc1" 
    autoSubmit="true" />

Row Impl コード: これは一時属性のセッターです (実際の属性を設定します):

    if (value) {
        this.setProvPracIsCurrent("Y");
        setAttributeInternal(ISCURRENTBOOLEAN, value);
    } else {
        this.setProvPracIsCurrent("N");
        setAttributeInternal(ISCURRENTBOOLEAN, value);
    }
4

2 に答える 2

2

この男は救世主です: http://adfreusablecode.blogspot.com/2012/09/afselectbooleancheckbox-with-yn-values.html

基本的に、一時属性を使用して一時属性とADFテーブル列を取り除きました。

代わりに、データベースにマップする属性 (String/VarChar) を使用しました。

テーブルに属性を追加すると、入力テキスト ボックスが作成されました。入力テキストをチェックボックスに変換しました。変換されたチェックボックスにネストされたバリデータ タグを削除しました。

Boolean と String の間で変換するコンバーターを作成しました。次のコードでクラスを作成します。

  import java.util.Collection;
import java.util.Collections;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import org.apache.myfaces.trinidad.convert.ClientConverter;


public class YNConverter implements Converter, ClientConverter {
    public YNConverter() {
        super();
    }
  public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value)
   {
     return "true".equals(value) ? "Y" : "N";
   }

   public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value)
   {
     return "Y".equals(value) ? "true" : "false";
   }

   public String getClientLibrarySource(FacesContext facesContext)
   {
     return null;
   }

   public Collection<String> getClientImportNames()
   {
     return Collections.emptySet();
   }

   public String getClientScript(FacesContext facesContext, UIComponent uiComponent)
   {
     return null;
   }

   public String getClientConversion(FacesContext facesContext, UIComponent uiComponent)
   {
     return null;
   }
}

faces-config.xml でクラスを追加し、それを Converter として定義します。YNConverter と名付けました。

JSP ページでは、チェックボックスは次のようになります。

   <af:selectBooleanCheckbox value="#{row.bindings.ProvPracIsCurrent.inputValue}"
                                                      label="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.label}"
                                                      required="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.mandatory}"
                                                      shortDesc="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.tooltip}"
                                                      id="it12"
                                                      converter="YNConverter"/>

ブーム。終わり。

于 2013-06-11T18:47:01.940 に答える