出现错误消息后,将inputText值恢复为先前的值

时间:2019-03-07 01:40:23

标签: java jdeveloper

我在一个片段中有2个表。

  1. 标题
  2. 详细信息表(基于 Header 表显示的数据)

这是东西: 表头表包含订购数量,明细表包含总拆分数量(详细信息),必须<=总订购数量(表头)

场景:

a。记录A在抬头

中的订购数量为10

b。 详细信息表中有2条记录,其拆分数量分别为5和4,它们合起来是9,即<=订购数量(10)

要求: 出现错误消息后,可以将 Detail 表中的inputText列重置为先前值的任何方法。

(这是为了防止用户转到 Header 表中的另一条记录并提交,然后也会提交 Detail 表中的无效值)

按钮代码:

public void saveButton(ActionEvent actionEvent) {
    int aQuantity=0;
    DCIteratorBinding orderDtl = ADFUtils.findIterator("OrderView4Iterator");
    if (orderDtl.getViewObject().getRowCount()>0){

    for(Row dtlRow: orderDtl.getAllRowsInRange()){
        System.out.println(dtlRow.getAttribute("OrderDtlIid"));
        aQuantity = aQuantity +  Integer.parseInt(dtlRow.getAttribute("Quantity").toString());
    }
    int bQuantity = Integer.parseInt(orderDtl.getCurrentRow().getAttribute("OrderQuantity").toString());

    if(aQuantity > bQuantity){
        errorMessage(null, "Error.");
     return;
    }
//then commit function}}}

列代码(详细信息表):

<af:column sortProperty="#{bindings.OrderView4.hints.Quantity.name}"
               filterable="true" sortable="false"
               headerText="#{bindings.OrderView4.hints.Quantity.label}"
               id="c3" width="182">
      <af:inputText value="#{row.bindings.Quantity.inputValue}"
                    label="#{bindings.OrderView4.hints.Quantity.label}"
                    required="#{bindings.OrderView4.hints.Quantity.mandatory}"
                    columns="#{bindings.OrderView4.hints.Quantity.displayWidth}"
                    maximumLength="#{bindings.OrderView4.hints.Quantity.precision}"
                    shortDesc="#{bindings.OrderView4.hints.Quantity.tooltip}"
                    id="it1" immediate="true" autoSubmit="true">
        <f:validator binding="#{row.bindings.Quantity.validator}"/>
      </af:inputText>
    </af:column>

单击该按钮即可进行验证。但是这里的主要问题是,当我转到另一个 Header 记录并单击saveButton和 Detail中的先前错误数量时, Detail 表中的错误数量保持不变表也已提交到数据库。

1 个答案:

答案 0 :(得分:0)

您可以创建一个自定义f:validator,以便在用户键入数据时立即验证输入的数据,并且在该字段无效时不允许用户使用您的按钮提交表单。

了解更多:https://docs.oracle.com/cd/E15586_01/web.1111/b31973/af_validate.htm

  

提交包含数据的表单时,浏览器发送请求值   每个可编辑值属性为   界。在JSF Apply Request Values中对请求值进行解码   相位和解码值本地保存在组件中   sumbittedValue属性。如果该值需要转换(对于   例如,如果它显示为字符串类型但存储为DateTime   对象),则在处理过程中数据将转换为正确的类型   在每个UI组件的基础上进行验证阶段。

     

如果验证或转换失败,则生命周期将转到   渲染响应阶段,并显示相应的错误消息   在页面上。如果转换和验证成功,则   更新模型阶段开始,转换后的值和经过验证的值是   用于更新模型。

     

发生验证或转换错误时,其组件   验证或转换失败将相关的错误消息放入   队列并使其自身无效。然后重新显示当前页面   错误消息。 ADF Faces组件提供了一种方法   以声明方式设置这些消息。

在您的情况下,您的jsf如下所示:

<af:column sortProperty="#{bindings.OrderView4.hints.Quantity.name}"
               filterable="true" sortable="false"
               headerText="#{bindings.OrderView4.hints.Quantity.label}"
               id="c3" width="182">
      <af:inputText value="#{row.bindings.Quantity.inputValue}"
                    label="#{bindings.OrderView4.hints.Quantity.label}"
                    required="#{bindings.OrderView4.hints.Quantity.mandatory}"
                    columns="#{bindings.OrderView4.hints.Quantity.displayWidth}"
                    maximumLength="#{bindings.OrderView4.hints.Quantity.precision}"
                    shortDesc="#{bindings.OrderView4.hints.Quantity.tooltip}"
                    id="it1" immediate="true" autoSubmit="true">
        <f:validator binding="#{YOUR_SCOPE.YOUR_BEAN.YOUR_CUSTOM_VALIDATOR}"/>
      </af:inputText>
    </af:column>

本教程也可能有用:http://www.catgovind.com/adf/adf-custom-validator-example/