ソリューション
MVC テーブルビルダーを実装して JCA テーブルコンポーネントを作成または変換します。
前提となる知識
この目的を達成するには、JCA の以下の手法について理解している必要があります。
• データユーティリティ
• GUI コンポーネント
• 操作フレームワーク
• コンフィギュレーション可能なテーブルビュー
• Java アノテーション
ソリューションエレメント
エレメント
|
タイプ
|
説明
|
ComponentDataBuilder
|
Java インタフェース
|
コンポーネントのデータモデルを作成します。
|
ComponentConfigBuilder
|
Java インタフェース
|
コンポーネントのコンフィギュレーションを作成します。
|
ConfigurableTableBuilder
|
Java インタフェース
|
テーブルとツリーのコンフィギュレーション可能なテーブルビューを作成します。
|
AbstractConfigurableTableBuilder
|
Java クラス
|
ビルダーが一般的に拡張する基本クラス
|
ComponentConfig
|
Java インタフェース
|
コンポーネントコンフィギュレーションの基本インタフェース
|
ComponentConfigFactory
|
Java インタフェース
|
ComponentConfig の実装を作成します。
|
ComponentBuilder
|
Java アノテーション
|
コンポーネントビルダーの検索に使用されるコンポーネント ID を設定します。
|
手順 - テーブルの共通コンポーネントの設定
新規ビルダークラスの作成
テーブルビルダークラスはテーブルコンフィギュレーションに対応しています。テーブルレベルと列レベルのすべてのプロパティがビルダークラスで設定されている必要があります。ビルダークラスを新規作成する場合、通常、MVC インフラストラクチャによって与えられた抽象基本クラスのいずれかを拡張します。
• AbstractConfigurableTableBuilder
コンフィギュレーション可能なテーブルビューがサポートされているツリーまたはテーブルを実装する場合、この基本クラスを使用します。この基本クラスはコンフィギュレーション可能なテーブルのインフラストラクチャに依存するので、CoreHtmlComp モジュールにあります。
• AbstractComponentBuilder
コンフィギュレーション可能なテーブルがサポートされていないテーブルやツリーにはこの基本クラスを使用します。
• AbstractComponentConfigBuilder
この基本クラスは情報ページに使用します。テーブルまたはツリーのコンフィギュレーションビルダーをそのデータビルダーから切り離す場合にもこれを使用できます (一般的な用途ではありません)。
• AbstractComponentDataBuilder
コンフィギュレーションビルダーとデータビルダーの実装を切り離したテーブルとツリーの実装にはこの基本クラスを使用します (一般的な用途ではありません)。
ComponentConfigBuilder API の実装
ComponentConfigBuilder を実装することで、テーブルレベルと列レベルのコンフィギュレーションオプションを指定できます。ComponentConfigBuilder は現在のところ以下の 1 つのメソッドを定義しています。
ComponentConfig buildComponentConfig(ComponentParams params);
このメソッドの働きはバージョン 9.x での describeTable タグの働きにほぼ相当します。
ComponentConfig の階層:
ComponentConfigFactory を使用したテーブル/列の ComponentConfig オブジェクトの取得
ComponentConfig を直接作成する代わりに ComponentConfigFactory を使用できます。抽象基本ビルダークラスを拡張する場合、getComponentConfigFactory() を呼び出すことでファクトリを使用できます。ComponentConfigBuilder を直接実装する場合、ComponentConfigFactoryAware も実装します。これにより、ビルダー初期化時にファクトリへの参照を取得します。
テーブルレベルのカスタマイズを指定するには TableConfig のインスタンスを使用し、列レベルのカスタマイズを指定するには ColumnConfig のインスタンスを使用する必要があります。TableConfig/ColumnConfig インスタンスの取得列を以下に示します。
ComponentConfigFactory factory = getComponentConfigFactory();
TableConfig table = factory.newTableConfig();
…
ColumnConfig col1 = factory.newColumnConfig(“column1Id”, false);
…
table.addComponent(col1);
列コンポーネントはテーブルコンポーネントのネステッドされたコンポーネントなので、前述のコード抜粋に示した addComponent() API を使用して ColumnConfig を TableConfig に追加できます。
TableConfig および ColumnConfig でのプロパティの設定:
コンフィギュレーションクラスに使用可能なカスタマイズポイントについては、
カスタマイズポイントを参照してください。各コンフィギュレーションクラスのプロパティと機能の詳細については、Javadoc を参照してください。
コンフィギュレーションのローカライズ
コンフィギュレーションビルダー内の値をローカライズするため、Mvc インフラストラクチャでは新しい ClientMessageSource クラスが提供されています。いずれかの抽象コンフィギュレーション基本クラスを拡張する場合、getMessageSource(String) を呼び出して、指定したリソースバンドルクラス名のメッセージソースを作成します。ClientMessageSource は WTMessage のような働きをしますが、使用するロケールは、サーバーの実行に使用されているロケールではなく、クライアントのロケールになります。
ビュー JSP の指定
ComponentDataBuilder API の実装
ComponentDataBuilder インタフェースを使用して、テーブルデータの取得メカニズムを設定できます。データビルダークラスは ComponentDataBuilder インタフェースを実装する必要があります。ComponentDataBuilder は現在のところ 1 つのメソッドを定義しています。
Object buildComponentData(ComponentConfig config, ComponentParams params)
このメソッドの働きは、9.x リリースストリームでの JCA における getModel/getIeModel タグの働きにほぼ相当します。
ConfigurableTable の登録
ComponentConfigBuilder の実装で ConfigurableTableBuilder も実装される場合、ConfigurableTable の実装を service.properties で登録する必要はありません。ConfigurableTableBuilder の実装自体を ComponentConfigBuilder の実装から切り離して登録することはできません。
ConfigurableTable の実装
ConfigurableTable は、ビルダーの静的内部クラスとして実装するか、別のファイルに配置できます。これをビルダーの実装からのみ使用する場合、プライベート静的内部クラスとして定義するようにしてください。例:
public class MyTableBuilder extends AbstractConfigurableTableBuilder {
…
@Override
public ConfigurableTable buildConfigurableTable(String tableId) throws WTException {
return new MyConfigurableTable();
}
private static class MyConfigurableTable extends JCAConfigurableTable {
…
}
…
}
コンフィギュレーションビルダーとデータビルダーを別々に設定
コンフィギュレーションビルダーとデータビルダーを別々のクラスに実装する場合、追加の ComponentBuilderType パラメータを @ComponentBuilder アノテーションに指定する必要があります。
コンフィギュレーションビルダーでは、次のように表示されます。
@ComponentBuilder(value=“my.component.id”,
type=ComponentBuilderType.CONFIG)
public class MyConfigBuilder implements ComponentConfigBuilder…
データビルダーでは、次のように表示されます。
@ComponentBuilder(value=“my.component.id”,
type=ComponentBuilderType.DATA)
public class MyDataBuilder implements ComponentDataBuilder…
アノテーションを使用せずに別々のビルダーを設定する場合、選択した Bean ID にサフィックス ".configBuilder" または ".dataBuilder" が付いている必要があります。たとえば、コンフィギュレーションビルダーを設定するには、以下を行います。
<bean name=”myComponent.configBuilder”
class=”my.config.builder.class.name”/>
MVC ビルダーの登録
MVC ビルダーを登録するには、ComponentBuilder アノテーションを使用するか、明示的なコンフィギュレーションを行うか、自動スキャンを利用します。自動スキャン。テーブルビルダーを登録した後で、JSP ベースの JCA コンポーネントと同様に、actions.xml でアプリケーションにテーブルコンポーネントを設定できます。
手順 - テーブルの共通コンポーネントの設定
MVC への既存のテーブル実装の変換
概要
このセクションでは、9.x レガシータグから新規 MVC テーブルビルダーの対応する属性への属性マッピングについて説明します。
describeTable
describeTable タグのコンテンツは ComponentConfigBuilder インタフェースの buildComponentConfig メソッドで指定されています。
JSP は、このようになっていました:
<jca:describeTable var="tableDescriptor" id="netmarkets_project_list"
configurable="true"
type="wt.projmgmt.admin.Project2" label="${projectListLabel}">
MVC コードは、このようになります:
@ComponentBuilder(“netmarkets_project_list”)
public class ProjectListBuilder extends AbstractConfigurableTableBuilder {
@Override
public ComponentConfig buildComponentConfig(ComponentParams params) {
ComponentConfigFacory factory = getComponentConfigFactory();
TableConfig table = factory.newTableConfig();
table.setLabel(ClientMessage.get(RESOURCE,"PROJECT_LIST_NAME");
table.setType("wt.projmgmt.admin.Project2");
…
return table;
}
describeColumn
describeColumn タグのコンテンツも ComponentConfigBuilder インタフェースの buildComponentConfig メソッドで指定されています。列コンポーネントはテーブルコンポーネントの子コンポーネントなので、テーブルコンフィギュレーションに追加されます。
JSP は、このようになっていました:
<describeTable var="tableDescriptor" type="wt.part.WTPart"
id=" test.table" label="testTable" >
<describeColumn id="name" sortable=”true”/>
<describeColumn id="number"/>
</describeTable>
MVC コードは、このようになります:
TableConfig table = factory.newTableConfig();
…
table.addComponent(factory.newColumnConfig(“name”,true));
table.addComponent(factory.newColumnConfig(“number”,false));
…
renderTable
renderTable タグのコンテンツも ComponentConfigBuilder インタフェースの buildComponentConfig メソッドで指定されています。
JSP は、このようになっていました:
<jca:renderTable showCustomViewLink="false" model="${tableModel}" showCount="true"
showPagingLinks="true" />
MVC コードは、このようになります:
TableConfig table = factory.newTableConfig();
…
table.setShowCount(true);
table.setShowCustomViewLink(false);
…
getModel
getModel タグのコンテンツは ComponentDataBuilder インタフェースの buildComponentData メソッドで指定されています。
JSP は、このようになっていました:
<jca:getModel var="tableModel" descriptor="${tableDescriptor}"
serviceName="com.ptc.netmarkets.projmgmt.ProjectCommands"
methodName="getProjects" ……. >
<jca:addServiceArgument value="${user}" type="wt.org.WTUser"/>
<jca:addServiceArgument value="${pseudoType}" type="java.lang.Integer"/>
</jca:getModel>
MVC コードは、このようになります:
@Override
public QueryResult buildComponentData(ComponentConfig config,
ComponentParams params) {
WTPrincipal user = SessionHelper.getPrincipal();
return ProjectCommands.getProjects(user,0)
}