af:弹出窗口打开后立即抛出必填字段验证错误(Jdev版本11.1.2.4)

时间:2015-08-25 05:52:09

标签: jsf oracle-adf

今天我遇到了一个例外,我无法找到根本原因,因为此错误非常难以预测。

我的要求很简单,我正在开发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操作,并在取消侦听器Rollback上执行。

请为此问题提出任何解决方案。 我在2-3个地方使用相同的方法,但它没有抛出任何错误,但在这种情况下,我无法解决这个问题。

尝试过的解决方法:  1.我尝试对弹出窗口中的所有字段保持立即= true,问题得到解决但即使用户没有输入必填字段也不会抛出任何验证错误,所以这是不可取的。

  1. 保持SkipValidation = true / skipDataControl。这不起作用
  2. 如果有人知道更好的方法,请告诉我。

    先谢谢。

4 个答案:

答案 0 :(得分:0)

从所有字段中删除必需=#{ *您的代码}行。

实施例 - &GT;删除 required =“#{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>

答案 1 :(得分:0)

尝试将按钮的 partialSubmit 属性设置为 true ,您需要将 triggerType 更改为点击 showPopupBehavior组件。

<af:commandButton text="Add" id="cbInsert" partialSubmit="true">
   <af:showPopupBehavior popupId="::p1" triggerType="click" align="afterEnd"/>

希望它有所帮助...

答案 2 :(得分:0)

我知道它为时已晚但今天我遇到了同样的问题,我已经完成了删除组件中所需的标记,并创建了一个绑定:(在获取弹出窗口时)将required属性设置为true &#34; socBinding.setRequired(真);&#34; 希望这有助于其他人

答案 3 :(得分:-1)

我找到了导致此错误的原因。这是一个空视图对象(0行)。解决方案:在视图对象中至少填充一行。

我表单的所有属性均具有必需的属性= false。然而,这引起了“并且它自动抛出了所需的字段验证”。好像我按下了一个按钮(没有即时= true)。验证在实体级别进行。

我没有触摸SkipValidation。默认为false。

P.S。 Studio Edition版本12.2.1.0.0