基本自定义 > 用户界面自定义 > 在 UI 中呈现信息 > 使用 JSP 框架构造和呈现表格 > 解决方案
  
解决方案
实现 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 当前定义了一种方法:
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 当前定义了一种方法:
Object buildComponentData(ComponentConfig config, ComponentParams params)
此方法的功能大致相当于 9.x 版本流中 JCA 的 getModel/getIeModel 标记的功能。
注册 ConfigurableTable
如果您的 ComponentConfigBuilder 实现也实现了 ConfigurableTableBuilder,则无需在 service.properties 中注册您的 ConfigurableTable 实现。无法独立于 ComponentConfigBuilder 实现注册 ConfigurableTableBuilder 实现本身。
实现 ConfigurableTable
您可以选择将 ConfigurableTable 作为构建器的静态内部类来实现,或将其放置在单独的文件中。如果您只希望在构建器实现中使用它,则建议将其定义为专用静态内部类。示例:
public class MyTableBuilder extends AbstractConfigurableTableBuilder {

@Override
public ConfigurableTable buildConfigurableTable(String tableId) throws WTException {
return new MyConfigurableTable();
}
private static class MyConfigurableTable extends JCAConfigurableTable {

}

}
配置单独的配置和数据构建器
如果希望在单独的类中实现配置和数据构建器,则必须为 @ComponentBuilder 注释提供一个附加的 ComponentBuilderType 参数。
对于配置构建器,如下所示:
@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 构建器
可使用 ComponentBuilder 注释或通过显式配置或通过自动扫描来注册 MVC 构建器。自动扫描。注册表构建器后,可以将表组件配置到 actions.xml 中的应用程序中,就像基于 JSP 的 JCA 组件一样。
有关注册/配置表组件的详细信息,请参阅 MVC 组件使用 JSP 框架构建和呈现表格
过程 - 配置表格通用组件
将现有表实现转换为 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)
}