OAF开发中会碰到这样的需求.
为字段1做一个Lov,选中后返回值1到字段,值2到字段2.
比如要为员工编号这个字段添加Lov,当用户选择员工编号后,需要将员工姓名自动带入到员工名称字段中。
需求
员工姓名这一列作为带出信息,一般会设置为 MessageStyledText这种不可修改的类型。
这时,问题就出现了。
你会发现,当选择员工编号后,员工姓名自动带了出来,然而,当再次点击页面上任何一个lov的时候,员工姓名会自动消失掉。
在第二次点击Lov的时候,带出信息就已经消失了
我们最终会看到这样的结果
这个现象会让人很困惑,因为我们不允许新建行时修改员工姓名,它只能作为员工编号的一个附加的信息,所以我们必须把它设置成为静态文本类型(MessageStyledText),而这样的话,它的值却无法正常地保存下来。(即便将其设置为其他类型采用disable的方式使其不可更改,也无法避免此种问题)。
通过观察Oracle供应商税信息设置页面的源代码,我发现了以下解决方法。
1. 我们需要新建一个隐藏的Item 叫做 nameSubmit,其类型为FormValue,ViewInstance以及ViewAttribute属性与员工姓名一致。
2. 我们将为Lov新增一个Mapping,将员工姓名映射到nameSubmit上面。所有Lov Mapping如下:
Lov Columns page columns
-----------------------------------------------------
emp_number => page.user_number
emp_name => page.emp_name
emp_name => page.nameSubmit
这样我们相当于同时将员工姓名存储在了两个Item中(emp_name与nameSubmit)。存储在formvalue中的值不会因为页面切换提交而消失,这样我们再次点击Lov按钮时,员工姓名就不会消失了。
