基本自定义 > 用户界面自定义 > 构造向导 > 客户端生成的表单数据 > 过程 - 提交客户端生成的隐藏表单数据
过程 - 提交客户端生成的隐藏表单数据
为客户端生成的字段添加默认值 (可选)
* 
如果您的应用程序不需要逐表逐行隐藏输入值,则可以跳过此步骤。
如果您的应用程序需要为表中出现的每个对象隐藏输入值,请在向导的表构建器中添加一个或多个列定义,以定义“仅数据存储”和“可编辑”列。使用相应的数据实用程序来生成默认值。为列指定唯一名称,以便可以在事件监听程序中对其进行标识 (例如,"hiddenColumn1")。
TableConfig table = factory.newTableConfig();
table.setId ('MYTABLEID');
..
. <... other table configuration here ...>
.
ColumnConfig hiddenCol1 = factory.newColumnConfig ("hiddenColumn1", false);
hiddenCol1.setDataUtilityId ("SOME_DU_ID");
hiddenCol1.setNeed ("SOME_DU_ID");
hiddenCol1.setComponentMode (ComponentMode.EDIT);
hiddenCol1.setDataStoreOnly (true);
table.addComponent (hiddenCol1);
ColumnConfig hiddenCol2 = factory.newColumnConfig ("hiddenColumn2", false);
hiddenCol2.setDataUtilityId ("SOME_DU_ID");
hiddenCol2.setNeed ("SOME_DU_ID");
hiddenCol2.setComponentMode (ComponentMode.EDIT);
hiddenCol2.setDataStoreOnly (true);
table.addComponent (hiddenCol2);
您的隐藏数据列必须定义为“可编辑”和“仅数据存储”,如上面代码中的粗体行所示。
SOME_DU_ID 是可以为列提供默认值的相应数据实用程序的 ID。它必须为向导表中的对象返回一个非 null 值;否则,数据存储中将不会存在对象行的相应字段。
在向导的 JSP 文件中添加 <script/> 块
在向导的 JSP 中,添加一个 <script/> 块,用于加载特定于应用程序的 Javascript 文件,如下所示:
<script type="text/javascript"
src="netmarkets/javascript/MYAPPLICATION/MYJSFILE.js">
</script>
添加应用程序的客户端逻辑
创建一个新的 Javascript 文件:...\netmarkets\javascript\MYAPPLICATION\MYJSFILE.js,其中包含将为向导表发出信号的 'submit' 事件的应用程序监听程序。代码应遵循以下大纲:
// Establish namespace
PTC.MYAPPLICATION={};
// Define wizard table 'submit' listener
PTC.MYAPPLICATION.MYLISTENER = function (table)
{
// see PTC.fakeLiterature.submitListener() code in
// /netmarkets/javascript/carambola/dataStoreOnlyExample.js};

// Add submit listener for wizard table once the table becomes 'available'
PTC.onAvailable
( 'MYTABLEID', function (table)
{
table.on ('submit', PTC.MYAPPLICATION.MYLISTENER);
});
}
在此示例中,提交监听程序正在使用 JCAappendFormHiddenInput 将隐藏的输入数据添加到提交的表单中。在此示例中,客户端逻辑会查找已添加到具有 'MYTABLEID' ID 的表格中每一行的两个隐藏特性。这些特性存在于数据存储中的每一行中,但不包含在 UI 中所显示表格的 DOM 中。这些特性的名称分别为 "hiddenColumn1" 和 "hiddenColumn2"。如果在一个对象上找到这些隐藏特性中的任何一个,则会生成一个标识对象 [row.get (“objectHandle”)] 和隐藏值本身 ("hiddenColumn1" 等) 的隐藏输入字段,并指定一个不太常用的常量值。
该示例还显示了如何添加与任何隐藏列不关联的隐藏输入值,但仍可标识特定对象 (请参阅上面对 JCAappendFormHiddenInput 的第二个调用)。
当然,这种类型的监听程序可用于在提交前向表单中添加、更改或移除任何所需的数据;而并不局限于处理所谓的“仅数据存储”字段。
提取向导 FormProcessor 中的隐藏输入值
最后一步是在向导的表单处理器的相应方法内提取由应用程序的 'submit' 监听程序添加的已提交隐藏输入值:
for (ObjectBean objBean : objectBeans)
{
final String paramKeyFoo = "noColumn";
final String paramKeyCol1 = "hiddenColumn1";
final String paramKeyCol2 = "hiddenColumn2";
String paramFoo = objBean.getTextParameter (paramKeyFoo);
String paramCol1 = objBean.getTextParameter (paramKeyCol1);
String paramCol2 = objBean.getTextParameter (paramKeyCol2);
log.error ("\nkey = " + paramKeyFoo + "\nvalue = " + paramFoo);
log.error ("\nkey = " + paramKeyCol1 + "\nvalue = " + paramCol1);
log.error ("\nkey = " + paramKeyCol2 + "\nvalue = " + paramCol2);
}
这会导致输出中包含类似于以下代码的内容,其中显示由之前所示的 Javascript 'submit' 监听程序添加到对象中的三个客户端生成值。
KEY = noColumn
VALUE = FOO_BAR_BIZ_BAZ
KEY = hiddenColumn1
VALUE = HIDDEN_COLUMN_1_GENERATED_VALUE
KEY = hiddenColumn2
VALUE = HIDDEN_COLUMN_2_GENERATED_VALUE
这对您有帮助吗?