複数のコンポーネントの作成
同じビルダーを使用し、2 つの使用事例がある、複数のコンポーネントを構築することがあります。
使用事例 1
コンポーネントは既存のコンポーネント/ビルダーから作成されます。たとえば、id="test.ComponentA" のコンポーネントと id="test.ComponentB" のコンポーネントがすでに存在する場合、両方のコンポーネントを 1 つのページに配置します。
@ComponentBuilder(value="test.multi.AB", type=ComponentBuilderType.CONFIG_ONLY)
public class MultiComponentBuilder extends AbstractComponentConfigBuilder{
@Override
public ComponentConfig buildComponentConfig(ComponentParams params)
throws WTException {
MultiComponentConfig configs = new MultiComponentConfig();
configs.addNestedComponent("test.ComponentA");
//you are specifying the componentId
configs.addNestedComponent("test.ComponentB");
configs.setView("/test/multi.jsp");
return config ;
}
}
この multiComponent 自体にはデータがないので、ComponentDataBuilder は必要ありません。
デフォルトビューでは処理できないので、ComponentConfig のビュー jsp を指定する必要があります。
addNestedComponent を使用して componentId を提供する場合、componentId が同じコントローラインスタンスによって処理されるようにします。つまり、タイプに依存しないコンポーネントだけか、タイプに依存するコンポーネントをこのアプローチと組み合わせて使用することができます。
使用事例 2
ここでは、コンポーネントを定義する必要があり、コンポーネントは共存します。たとえば、プロパティパネルをテーブルとともに表示します。
ComponentDataBuilder が必要です。
MultiComponentConfig で使用可能な ComponentConfig ごとに buildComponentData が呼び出されます。これは MultiComponentConfig に配置されている順序で呼び出されます。
componentId を指定して ComponentParams からすでに処理されている ComponentConfigrawData にアクセスできます。
デフォルトビューでは処理できないので、ComponentConfig のビュー jsp を指定する必要があります。
@ComponentBuilder("test.array.PQ")
public class ComponentArrayBuilder extends AbstractComponentBuilder {
@Override
public ComponentConfig buildComponentConfig(ComponentParams params)
throws WTException {
MultiComponentConfig configs = new MultiComponentConfig();
TableConfig table1 = createTable1();
//create a table with id = component1
......
TableConfig table2 = createTable2();
//create a table with id = component2
......
configs.addComponent(table1);
//add the components
configs.addComponent(table2);
configs.setView("/test/array.jsp");
return configs ;
}
@Override
public Object buildComponentData(ComponentConfig config,
ComponentParams params) throws WTException {
if ("component1".equals(config.getId())) {
//return data for table with id= component1
} else {
//return data for table with id= component2
}
}
}
これは役に立ちましたか?