【问题标题】:Revert inputText value to previous value after error message错误消息后将 inputText 值恢复为以前的值
【发布时间】:2019-03-07 01:40:23
【问题描述】:

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

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

事情是这样的: Header 表包含订购数量,Detail 表包含 total split quantity(Detail) 必须 。

场景:

一个。记录 A 在 Header

中订购了 10 个

b. Detail 表中有 2 条拆分数量为 5 和 4 的记录,它们组合在一起为 9,即

要求: 提示错误消息后,将 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 记录并单击保存按钮时 Detail 表中的错误数量和 Detail 中的先前错误数量保持不变 表也提交到数据库。

【问题讨论】:

    标签: java jdeveloper


    【解决方案1】:

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

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

    当一个带有数据的表单被提交时,浏览器发送一个请求值 将每个 UI 组件的可编辑值属性发送到服务器 边界。请求值在 JSF 应用请求值期间被解码 相位和解码值本地保存在组件中 sumbittedValue 属性。如果该值需要转换(对于 例如,如果它显示为 String 类型但存储为 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2011-05-13
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多