创建多个组件
需要使用同一构建器构建多个组件,并且可以有两个用例。
用例 1
这些组件由既有的组件/构建器组成。例如,如果已有一个带有 id="test.ComponentA" 的组件和一个带有 id="test.ComponentB" 的组件,而我们需要将两个组件都放在一个页面中。
@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 ;
}
}
• 不需要 ComponentDataBuilder,因为此 multiComponent 本身不包含任何数据。
• 您需要为此 ComponentConfig 指定一个视图 jsp,因为没有默认视图可以处理它。
• 使用 addNestedComponent 提供 componentId 时,请确保 componentId 将由同一控制器实例处理。也就是说,您只能将基于非类型或基于类型的组件与此方法结合使用。
用例 2
在此需要定义这些组件,且这些组件是共存的。例如,您想要获得一个带有表格的特性面板。
• 需要用到 ComponentDataBuilder。
• 基础结构调用 buildComponentData 中每个 ComponentConfig 的 MultiComponentConfig。其调用方式与其在 MultiComponentConfig 中的放置顺序相同。
• 您可以从提供 componentId 的 ComponentParams 中访问已经过处理的 ComponentConfig 的 rawData。
• 您需要为此 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
}
}
}