異なるターゲットオブジェクトを設定する
この手順では、属性パネルまたは行にデータムオブジェクトとは異なるターゲットオブジェクトを指定する方法について説明します。行選択と操作の一意の識別子はターゲットオブジェクトから取得され、ターゲットオブジェクトは属性に表示される値を作成するデータユーティリティに渡されます。ターゲットオブジェクトはゲッターメソッドを介してデータムオブジェクトから取得可能でなければなりません。テーブルとツリーの場合、テーブル/ツリー全体または特定の列のみにターゲットオブジェクトを指定できます。パネルの場合、パネル全体または特定の属性のみにターゲットオブジェクトを指定できます。
ターゲットオブジェクトはデータムオブジェクトの "ゲッター" メソッドを介して取得可能でなければなりません。
行選択メニュー、行操作メニュー、またはその両方があるテーブルまたはツリーに異なるターゲットオブジェクトを設定する場合、一意の行識別子を指定できるように、ターゲットオブジェクトは以下のいずれかのタイプでなければなりません。
• Persistable
• WTReference
• ObjectIdentifeir
• NmObject
• NmOid
• NmSimpleOid
次のいずれかのメソッドを使用してターゲットオブジェクトを設定します。
• JCATableConfig.setTargetObject() - テーブルまたはツリー全体にターゲットオブジェクトを設定
• JCAColumnConfig.setTargetObject() - 特定のテーブル/ツリー列にターゲットオブジェクトを設定
• AttributePanelConfig.setTargetObject() - 属性パネル全体にターゲットオブジェクトを設定
• AttributeConfig.setTargetObject() - パネル内の 1 つの属性にターゲットオブジェクトを設定
パネルまたはテーブル全体にターゲットオブジェクトを設定した場合、AttributeConfig または JCAColumnConfig によってオーバーライドされないかぎり、そのターゲットオブジェクトがすべての属性/列に使用されます。パネルまたはテーブル全体にターゲットオブジェクトが指定され、特定の属性または列ではデータムオブジェクトを使用する場合、その属性または列のコンフィギュレーションでターゲットオブジェクトを "" に設定できます。
以下に例を示します。
JcaTableConfig table = (JcaTableConfig)factory.newTableConfig();
table.setTargetObject(“foo”);
ColumnConfig c = factory.newColumnConfig("name",label,false);
ColumnConfig col = factory.newColumnConfig("thing1",label,false);
col.setTargetObject("");
ColumnConfig col2 = factory.newColumnConfig("thing2",label,false);
col2.setTargetObject("bar");
上記の例では、各列で、DefaultNmObjectDataUtility が targetObject から NmObject の作成を試みます。名前列の場合、行データムに対して getFoo() を呼び出すことで targetObject が取得されます。これは、"foo" はテーブルに設定されているターゲットオブジェクトであり、名前列ではオーバーライドされていないためです。thing1 の場合、"" が設定されているので、targetObject は行データムとなります。thing2 の場合、行データムに対して getBar() を呼び出すことで targetObject が取得されます。
Bean プロパティの設定との違い
この targetObject のコンフィギュレーションは、Bean スタイルのプロパティコンフィギュレーションを使用するコンフィギュレーションとどのように違うのでしょうか。たとえば、次のどちらのコンフィギュレーションでも、テーブルに返った行オブジェクトの位置に getFoo().getBaz() が表示されます。
ColumnConfig colA = factory.newColumnConfig("thing1",label,false);
colA.setTargetObject("foo");
colA.setNeed("baz");
ColumnConfig colB = factory.newColumnConfig("thing2",label,false);
colB.setTargetObject("");
colB.setNeed("foo.baz");
少し異なる点として、colA は行などの DefaultNmObjectUtility および DataUtility に送信されるターゲットオブジェクトとして 'foo' を使用します。colB は元の行オブジェクトを使用します。