从 inputText 更新值

Update value from inputText

我正在使用 ADF BC,我有几个输入文本。 假设我有以下情况:

第 1 步:在三个不同的输入文本中插入 1、2、3(it1、it2 和 it3,这三个都具有 autoSubmit == true)。

第 2 步:单击调用以下方法的按钮:

    public String aplicarFiltro() {
        Object it1param = null, it2param = null, it3param = null, sos1param = null;
        Parametros_IndicadoresLoadAll pila = Parametros_IndicadoresLoadAll.getInstance();
        pila.clear();
            if(it1.getValue() == null || it1.getValue().toString().isEmpty()) {
                it1param = "";
            } else {
                it1param = it1.getValue();
                if(it2.getValue() == null || it2.getValue().toString().isEmpty()) {
                    it2param = "";
                } else {
                    it2param = it2.getValue();
                    if(it3.getValue() == null || it3.getValue().toString().isEmpty()) {
                        it3param = "";
                    } else {
                        it3param = it3.getValue();
                    }
                }

            }

            if(sos1.getValue() != null) {
                sos1param = sos1.getValue();
            }
        pila.init(it1param, it2param, it3param, sos1param);
        if (it1.getValue() == null || it1.getValue().toString().isEmpty()) {
            showPopup(p1, true);
   /*      } else if (sos3.getValue() == null) {
            showPopup(p2, true); */

        }
        return null;
    }

第 3 步:我擦除 it2 和 it3 的值,我再次单击按钮并调用相同的方法。但是,it2 和 it3 的值保持不变。

为什么会发生这种情况,我该如何解决?

不知道是不是还有更多的地方不对。但是如果 i1 有值,你只是将 "i2param" 设置为 null 以外的值,如果 i1 和 i2 有值,则将 "i3param" 设置为 null 以外的值。

所以从以下开始。改变这个:

        if(it1.getValue() == null || it1.getValue().toString().isEmpty()) {
            it1param = "";
        } else {
            it1param = it1.getValue();
            if(it2.getValue() == null || it2.getValue().toString().isEmpty()) {
                it2param = "";
            } else {
                it2param = it2.getValue();
                if(it3.getValue() == null || it3.getValue().toString().isEmpty()) {
                    it3param = "";
                } else {
                    it3param = it3.getValue();
                }
            }

        }

至:

if(it1.getValue() == null || it1.getValue().toString().isEmpty()) {
    it1param = "";
} else {
    it1param = it1.getValue();
}

if(it2.getValue() == null || it2.getValue().toString().isEmpty()) {
    it2param = "";
} else {
    it2param = it2.getValue();
}

if(it3.getValue() == null || it3.getValue().toString().isEmpty()) {
    it3param = "";
} else {
    it3param = it3.getValue();
}

尝试重新考虑您的方法:尝试使用 BC 层而不是在支持 bean 中处理业务。所以你可以移动方法

public String aplicarFiltro() {..} 到应用程序模块实现中。 在那里,以编程方式获取对 VO 当前行的引用并读取属性的值。

首先,从 BC Tester 测试您的方案(您的方法)。然后,您可以通过绑定公开该方法,并从支持 bean 中调用它。 另外,我会为您的 VO 公开 RowImpl class,并将一些调试信息放入 setIt1()、setIt2()、setIt3() 属性中,以查看变化如何。

记住,在 BC 层上管理业务总是比托管 bean 简单得多。远离 JSF 生命周期。