基本自定义 > 用户界面自定义 > MVC 组件 > MVC 组件概述 > MVC > JCA 组件
  
JCA 组件
以下为 ComponentConfig 的几个实现:
JcaTableConfig
JcaAttributesTableConfig
JcaTreeConfig
JcaAttributePanelConfig
JcaColumnConfig
JcaInfoConfig
JcaPropertyConfig
JcaPropertyPanelConfig
MVC 的 JCA 配置
<Windchill>\codebase\config\mvc\jca-mvc.xml 中提供了所有 JCA 特定的 Spring 配置。下面的代码段显示了 url 处理程序映射的配置。所有 url 模式 ptc1/comp/* 都将映射到 id 为 componentController 的 bean,而模式 ptc1/tcomp/* 将映射到 id 为 typeBasedComponentController 的 bean。
<bean id="abstractComponentHandlerMapping" abstract="true"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
-----
</bean>
<bean id="componentHandlerMapping" parent="abstractComponentHandlerMapping">
<property name="mappings" ref="componentHandlerMappings" />
-----
</bean>
<bean id="componentHandlerMappings"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties"><props>
<prop key="/comp/**">componentController</prop>
<prop key="/tcomp/**">typeBasedComponentController</prop>
</props></property>
</bean>
下面的代码段显示了 id 为 componentController 的 bean 的定义。
jcaComponentBuilderResolver 被注入为 theComponentBuilderResolver
defaultViewMappings 特性被定义为映射默认视图。
<bean id="componentController"
class="com.ptc.mvc.components.ComponentController">
<property name="componentBuilderResolver"
ref="jcaComponentBuilderResolver" />
<property name="defaultViewMappings">
<map>
<entry key="com.ptc.mvc.components.TreeConfig"
value="/components/tree.jsp" />
<entry key="com.ptc.mvc.components.TableConfig"
value="/components/table.jsp" />
<entry key="com.ptc.mvc.components.AttributesTableConfig“
value="/components/table.jsp" />
<entry key="com.ptc.mvc.components.AttributePanelConfig”
value="/components/attributePanel.jsp" />
</map>
</property>
-----------
</bean>
下面的代码段显示了 id 为 typeBasedComponentController 的 bean 的定义。
typeBasedComponentBuilderResolver 被注入为 ComponentBuilderResolver。在查找最佳匹配的构建器时,它还会考虑上下文对象的 Windchill 类型。
<bean id="typeBasedComponentController"
class="com.ptc.mvc.components.ComponentController“
parent="componentController“>
<property name="componentBuilderResolver"
ref="typeBasedComponentBuilderResolver" />
</bean>
指定的默认处理程序将处理没有映射的所有 MVC url 模式。
<bean id="componentHandlerMapping" parent="abstractComponentHandlerMapping">
<property name="defaultHandler" ref="netmarketsController" />
-----
</bean>
<bean id="netmarketsController"
class="com.ptc.jca.mvc.controllers.LegacyController" />
ComponentConfigFactory
属于 ComponentConfigFactoryAware 的构建器将通过 ComponentConfigFactory 注入。ComponentConfigFactory 提供了不同 ComponentConfig 实现的实例 (例如表格、树等)。在 JCA 中,注入发生在 bean 后处理器中,并在 <Windchill>\codebase\config\mvc\jca-mvc.xml 中进行配置。
<bean class="com.ptc.mvc.components.support.ComponentBuilderBeanPostProcessor">
.....
<property name="componentConfigFactory" ref="jcaComponentConfigFactory" />
<property name="infoComponentConfigFactory">
......
</property>
<property name="typedAttrLayOutFactory">
<bean class="com.ptc.jca.mvc.components.JcaTypedAttrLayOutFactory" />
</property>
</bean>
<bean name="jcaComponentConfigFactory"
class="com.ptc.jca.mvc.components.JcaComponentConfigFactory"
factory-method="getInstance" />
ComponentDataConvertor
<bean id="jcaComponentDataConverter"
class="com.ptc.jca.mvc.components.JcaComponentDataConverter" />
<bean id="jcaComponentDataBuilder"
class="com.ptc.jca.mvc.components.DefaultJcaComponentDataBuilder"
scope="prototype">
<property name="componentDataConverter"
ref="jcaComponentDataConverter" />
</bean>
<bean id="jcaComponentBuilderResolver
class="com.ptc.jca.mvc.components.JcaComponentBuilderResolver">
......
<lookup-method name="createJcaDataBuilder"
bean="jcaComponentDataBuilder" />
</bean>
需要对 ComponentDataBuilder 中提供的数据进行处理,以便供 JCA 使用。在此阶段通过 dataUtilities 运行数据。JcaComponentDataConverter 执行此操作,并注入到 jcaComponentBuilderResolver 中。
ComponentBuilder 解析器
• 如果指定的 DataBuilder 是 ConvertingComponentDataBuilder 的实例,则 JcaComponentBuilderResolver 将其用作 ComponentDataBuilder
• 如果指定的 DataBuilder 是 ComponentDataBuilder 的实例,则 JcaComponentBuilderResolver 将其用作 DefaultJcaComponentDataBuilder 的内部构建器。
生成 MVC URL
有两种类型的 JCA MVC url。
非 TypeBased JCA MVC url:此处上下文对象不参与构建器解析过程。
TypeBased JCA MVC url:在此上下文对象的类型参与构建器解析过程。
这是使用下列操作定义生成的:
<action>
<component name="myCompId" ……/>
</action>
<action>
<component name="myCompId" " typeBased="true" ……/>
</action>
e.g
<action name="CustEx_mvc_table">
<component name="carambola.mvc.table" windowType="page" />
</action>
<action name="primaryAttributes" resourceBundle="com.ptc.core.ui.navigationRB">
<component name="primaryAttributes" typeBased="true" windowType="page"/>
---
</action>
<Windchill>\codebase\WEB-INF\tlds\mvc.tld 具有可用的帮助程序函数
<%@ taglib uri="http://www.ptc.com/windchill/taglib/mvc" prefix="mvc"%>
---
<jsp:include page="${mvc:getComponentURL('part.report.multiLevelBOM')}" />
-----
表格大小限制
表格中显示的最大行数是由具有用户级别可见性的此首选项驱动的。它将适用于系统中的所有 JCA 表格。当前,预设默认值为 2000 行,您可以根据客户端硬件和浏览器类型对其进行更改。
对于树,会强制实施限制,但最终用户可对其进行覆盖。一旦树达到大小限制,折叠任何节点都会将其子项从客户端中移除,以释放客户端中的某些资源。直到客户端的节点数低于大小限制时才会发生这种情况。
操作处理
可将操作粗略划分为三个组。
加载对象后,便可执行这些操作。
组 1 - 仅作用于已加载数据的操作
行级别操作和多选操作
全选,Ctrl/Shift 选择,全部清除
仅查看选定对象
组 2 - 作用于整个数据集的操作
可随时执行这些操作 (如果数据集不完整,则转至服务器以获取所有数据)
切换表格视图
在表格中搜索
导出列表
组 3 - 适用于表格本身的操作
可随时执行这些操作
创建操作
取消数据加载
保存表格视图
排序
排序是一种特殊的操作,使用数据源后,具体将取决于客户端中的数据。
如果数据集完整
在客户端中进行排序
如果仍在加载数据
对客户端中已有的数据进行排序
按排序顺序将剩余轮询行插入客户端
如果已达到结果限制
在客户端中进行排序
仅对客户端中的行进行排序 (不是完整数据集)
版本列是一个例外,它使得服务器可以执行排序,但只能对客户端中提供的数据集进行排序。
技巧
启用 Spring 日志记录
请在 <Windchill>\codebase\WEB-INF\log4jMethodServer.properties 中添加以下条目,然后重新启动服务器。
logger.Springframework.name=org.springframework
logger.Springframework.level=DEBUG
访问本地化消息
ResourceBundleClientMessageSource 可用于获取本地化消息。
String resourceBundle = "com.ptc.test.TestResource";
ClientMessageSource messageSource =
new ResourceBundleClientMessageSource(resourceBundle);
String message = messageSource.getMessage(TestResource.TEST);
Entry in the TestResource file
@RBEntry("Test Message")
public static final String TEST = "test";
如果您的构建器扩展了预设抽象构建器,请利用其 API
AbstractComponentConfigBuilder.getMessageSource(String resourceBundle)
AbstractComponentDataBuilder.getMessageSource(String resourceBundle)
AbstractInfoConfigBuilder.getMessageSource(String resourceBundle)
访问本地化消息
存储视图组件
所有视图 jsp 都应放置在 <Windchill>\WEB-INF\jsp 下,且应相对于 <Windchill>\WEB-INF\jsp 指定值。
table.setView("/carambola/carambolaMVCExampleTable.jsp");
在 JCA 组件构建器中请求 Nm*Bean
NmHelperBean helper = ((JcaComponentParams) params).getHelperBean();
NmCommandBean nmCommandBean = helper.getNmCommandBean();
HttpServletRequest request = nmCommandBean.getRequest();
构建器的线程安全
默认情况下,构建器遵循 servlet (单态作用域) 的线程安全模式,这意味着构建器中的实例变量必须是线程安全的。您的配置和数据构建器 API 之间的通信可通过配置对象本身来完成,也可通过 ComponentParams 进行。
public class TestComponentBuilder extends AbstractComponentBuilder{
@Override
public ComponentConfig buildComponentConfig(ComponentParams params)
throws WTException {
Object myObject;
//add information that you want to pass to data builder
params.setAttribute("myKey", myObject);
-----
}
@Override
public Object buildComponentData(ComponentConfig config,
ComponentParams params)
throws WTException {
//get the information that was put in config builder
Object myObject = params.getAttribute("myKey");
-----
}
}