Oracle ADF 在插入一条业务主键时 点保存后 报错误Failed to validate all rows in a transaction
分析了一下原因:
在EO中我已经做了EO唯一性校验 理论上是不可能出现这个现象的.
后来才发现是大小写的原因.
在页面两种转大写方法1种是js法,一种是在context转
context法:
只要在stype中设置
text-transform:uppercase;就可以了 在ADF中,设置属性
contentStyle="text-transform:uppercase;"即可(实际上该value仍为小写)
js法:
js代码
function toUpper(event) { var txtField = event.getCurrentTarget(); txtField.setValue(txtField.getSubmittedValue().toUpperCase()); }输入域事件
<af:clientListener method="toUpper" type="valueChange"/>
在界面上 比如我在业务主键Code输入 haq 在context上调用Uppercase()
给我转成大写HAQ展现在UI上,但实际上 该Code仍然为小写的,
而在Managebean中我再次调用String 型的转大写功能存入数据库(数据库中该字段是存在唯一性校验的)
则会因为冲突而报错误
而在界面上按Shift输入haq 则直接进入EO校验
所以考虑 在JS中把用户界面输入的haq直接转成HAQ而不是在context里转.context转是无意义的.它只是界面看到的一种效果
另外JS中的转大写代码是在光标离开后才有变化,所以仍然要结合contextStyle的转大写.