今天我遇到了一个例外,我无法找到根本原因,因为这个错误是非常不可预测的。
我的要求很简单,我正在开发ADF表单,我正在执行简单的DML操作。为了添加新记录,我使用弹出窗口。问题出现在这里,每当我点击Add按钮弹出窗口打开时它会自动抛出必要的字段验证。请查看下面的弹出代码供您参考。 (Jdev版本11.1.2.4)
<af:popup childCreation="deferred" autoCancel="enabled" id="p1" popupFetchListener="#{pageFlowScope.bean.onPopupFetch}"
contentDelivery="lazyUncached" popupCanceledListener="#{pageFlowScope.bean.onCancelPopup}">
<af:dialog id="d1" dialogListener="#{pageFlowScope.bean.onDialogListener}"
type="okCancel">
<af:panelFormLayout id="pfl1">
<af:inputText value="#{bindings.Code.inputValue}" label="#{bindings.Code.hints.label}" required="#{bindings.Code.hints.mandatory}" columns="#{bindings.Code.hints.displayWidth}" maximumLength="#{bindings.Code.hints.precision}" shortDesc="#{bindings.Code.hints.tooltip}" id="it1">
<f:validator binding="#{bindings.Code.validator}"/>
<af:convertNumber groupingUsed="false" pattern="#{bindings.Code.format}"/>
</af:inputText>
<af:selectOneChoice value="#{bindings.NotifInd1.inputValue}"
label="#{bindings.NotifInd1.label}"
required="#{bindings.NotifInd1.hints.mandatory}"
shortDesc="#{bindings.NotifInd1.hints.tooltip}" id="soc1">
<f:selectItem itemLabel="Received" itemValue="R" id="si2"/>
<f:selectItem itemLabel="Send" itemValue="S" id="si1"/>
</af:selectOneChoice>
<af:inputText value="#{bindings.BlockOccur.inputValue}"
label="#{bindings.BlockOccur.hints.label}"
required="#{bindings.BlockOccur.hints.mandatory}"
columns="#{bindings.BlockOccur.hints.displayWidth}"
maximumLength="#{bindings.BlockOccur.hints.precision}"
shortDesc="#{bindings.BlockOccur.hints.tooltip}" id="it3">
<f:validator binding="#{bindings.BlockOccur.validator}"/>
<af:convertNumber groupingUsed="false" pattern="#{bindings.BlockOccur.format}"/>
</af:inputText>
<af:inputText value="#{bindings.Name.inputValue}" label="#{bindings.Name.hints.label}"
required="#{bindings.Name.hints.mandatory}"
columns="#{bindings.Name.hints.displayWidth}"
maximumLength="#{bindings.Name.hints.precision}"
shortDesc="#{bindings.Name.hints.tooltip}" id="it4">
<f:validator binding="#{bindings.Name.validator}"/>
</af:inputText>
</af:panelFormLayout>
<f:facet name="buttonBar"/>
</af:dialog>
</af:popup>
<af:commandButton text="Add" id="cbInsert" immediate="true">
<af:showPopupBehavior popupId="::p1" triggerType="action" align="afterEnd"/>
</af:commandButton>
在popupFetchListener中,我执行简单的createInsert操作和取消侦听器回滚。
请为此问题提出任何解决方案。我在2-3个地方使用相同的方法,但它没有抛出任何错误,但在这种情况下,我无法解决这个问题。
尝试过的解决方法:1。我尝试对弹出窗口中的所有字段保持立即= true,问题得到解决但即使用户没有输入必填字段也不会抛出任何验证错误,所以这是不可取的。
如果有人知道更好的方法,请告诉我。
提前致谢。
而不是使用CreateInsert使用Create Operation。
从所有字段中删除required =#{* you code}行。
示例 - >删除此必需=“#{bindings.Name.hints.mandatory}”
<af:inputText value="#{bindings.BlockOccur.inputValue}"
label="#{bindings.BlockOccur.hints.label}"
*****required="#{bindings.BlockOccur.hints.mandatory}"*****---->Delete this line in all the fields of Popup PanelFormLayout code
columns="#{bindings.BlockOccur.hints.displayWidth}"
maximumLength="#{bindings.BlockOccur.hints.precision}"
shortDesc="#{bindings.BlockOccur.hints.tooltip}" id="it3">
<f:validator binding="#{bindings.BlockOccur.validator}"/>
<af:convertNumber groupingUsed="false" pattern="# {bindings.BlockOccur.format}"/>
</af:inputText>
尝试将按钮的partialSubmit属性设置为true,您需要更改triggerType以在showPopupBehavior组件中单击。
<af:commandButton text="Add" id="cbInsert" partialSubmit="true">
<af:showPopupBehavior popupId="::p1" triggerType="click" align="afterEnd"/>
希望能帮助到你...
我知道它为时已晚,但今天我遇到了同样的问题,我已经完成了删除组件中所需的标记,并创建了一个绑定:(在获取弹出窗口时)将required属性设置为true“socBinding.setRequired (真正);”希望这有助于其他人
我找到了导致这个bug的原因。这是一个空视图对象(0行)。解决方案:在视图对象中填充至少一行。
我的表单的所有属性都具有required = false。然而它导致“并且它会自动抛出所需的现场验证。”好像我按了一个按钮(没有立即=真)。验证在实体级别工作。
我没有触及SkipValidation。它默认为false。
附: Studio Edition版本12.2.1.0.0