Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保持三个setter值中的最新值_Java_Xpages - Fatal编程技术网

Java 如何保持三个setter值中的最新值

Java 如何保持三个setter值中的最新值,java,xpages,Java,Xpages,我正在维护一个XPages应用程序。有一个“ServiceCost”对象,它有一个名为“BudgetCode”的字段,该字段在数据库中有一个对应的字段。我遇到的问题是,接口有三个选项卡,每个选项卡显示ServiceCost对象值及其BudgetCode字段,当我在第一个选项卡中修改BudgetCode字段时,对象设置器“SetBudgetCode”被调用三次,并用第二个和第三个选项卡中的旧值重写新值。如何保持新值?这就是如何保留第一次调用“setBudgetCode”setter创建的值的方法

我正在维护一个XPages应用程序。有一个“ServiceCost”对象,它有一个名为“BudgetCode”的字段,该字段在数据库中有一个对应的字段。我遇到的问题是,接口有三个选项卡,每个选项卡显示ServiceCost对象值及其BudgetCode字段,当我在第一个选项卡中修改BudgetCode字段时,对象设置器“SetBudgetCode”被调用三次,并用第二个和第三个选项卡中的旧值重写新值。如何保持新值?这就是如何保留第一次调用“setBudgetCode”setter创建的值的方法

多谢各位

这是显示三个相关选项卡的选项卡控制器

<xe:djTabContainer id="ContracttabbedPanel"
    title="container" style="width: 100%;" persist="true"
    tabPosition="top" doLayout="false"
      rendered="#{ServiceSpendController.initialstagecomplete}">
    <xe:djTabPane title="Baseline" id="tab_baseline">
         <xc:ContractBaseline></xc:ContractBaseline>
         </xe:djTabPane>
         <xe:djTabPane title="Planned" id="tab_planned">
         <xc:ContractPlanned></xc:ContractPlanned>
         </xe:djTabPane>
         <xe:djTabPane title="Actual" id="tab_actual">
         <xc:ContractActual></xc:ContractActual>
         </xe:djTabPane>
</xe:djTabContainer>

这是budgetCode字段的XPage代码

<xp:inputText id="editBudgetCode" value="#{rowData.budgetCode}"
     style="width:75.0px" required="true">
     <xp:this.attrs>
     <xp:attr name="triggeringhandlerid" value="btnsavehandlerid">
     </xp:attr>
     <xp:attr name="triggeringhandlerid" value="btnbaservicespendrecalculatehandler">
     </xp:attr>
     <xp:attr name="invalidstring" value="">
     </xp:attr>
     <xp:attr name="message"
        value="Baseline Tab - Budget Code. This field cannot be null">
     </xp:attr>
     <xp:attr name="friendlyname" value="Budget Code">
     </xp:attr>
     <xp:attr name="insertfieldid" value="dspService">
     </xp:attr>
     <xp:attr name="tab" value="Baseline">
     </xp:attr>
     </xp:this.attrs>
     <xp:this.converter>
     <xp:converter converterId="SimpleString">
     </xp:converter>
     </xp:this.converter>
</xp:inputText>

这应该可以:

public class Test {
    private String value;
    private String firstValue;

    public void setValue(String value) {
        this.value = value;
        if (firstValue == null) {
            firstValue = value;
        }
    }
}
您将在第二个变量中保留第一个设置值

如果只允许一个集合(并避免下一个集合),也可以使用该集合:

public class Test {
    private String value;

    public void setValue(String value) {
        if (this.value == null) {
            this.value = value;
        }
    }
}
当然,在这段代码中,如果第一个集合给出了null值,那么另一个集合的值应该是错误的。但我认为,在你的情况下,这不应该发生

不管怎么说,我觉得你的设计有问题。最好不要将3个字段映射到同一个值,以避免此类行为。
我给你的解决方案并不漂亮。但它会为您的设计问题提供一个快速解决方案。

如果有三个可编辑字段绑定到同一基础字段,则所有三个字段都会提供“新值”。一个字段应该是可编辑的,另外两个刚计算的字段使用客户端上的onchange事件为所有三个字段设置新的/更改的值。然后,在提交后,无论以何种顺序字段保存回文档,您都将在文档中拥有正确的值

更新:



您的编辑字段
我认为这行不通。一旦设置,您将无法更改它。我怀疑部分刷新(可能是初始页面加载)会将其设置为空白字符串,而不是将其保留为空,您将无法从中更改它。@PaulStephenWithers我同意。但是,如果它不再需要更新它的模型,我的解决方案就可以工作了。但正如我在回答中所说,我认为他在设计上有问题。他最好重新考虑一下它的设计。谢谢。是的,我用数组做了类似的尝试。但问题是添加新的对象字段会导致应用程序中的其他地方出现许多问题(应用程序非常复杂,我没有构建它),因此我无法向对象添加新字段,而不会导致更多问题需要解决。是的。我一点也不喜欢这个设计。一位前同事创建了它,然后离开了,没有太多的文档。这是非常复杂的,不是我应该做的。我甚至发现了从未使用过的程序etc@user2696089我也知道:)。祝你好运谢谢你,保罗。是的,这会起作用,但问题是我受用户想要什么的约束,他们希望能够修改三个选项卡中的任何一个字段。维护这个应用程序让我感到非常兴奋,然后使用一个按钮,让他们通过对话框以编程方式设置值,并使用计算字段显示值。或者您需要一些逻辑来设置loaded属性,以便在任何时候只加载一个可编辑字段。或者,将控件绑定到不同的viewScope变量。在保存时使用逻辑来确定优先级,即如果第一个变量有值,则使用该值,否则使用第二个变量,否则使用第三个变量!!!这听起来是个选择。我会试试看,然后再打给你。Cheers一些代码来帮助描述问题,一个格式良好的问题将在这里起到很大作用,如果您更改第三个选项卡中的字段,它会起作用?Sven-是的,您是正确的,当在第三个选项卡中更改值时,新值会保留,并且在第一个和第二个选项卡中值会更新。谢谢Knut。我理解您对上述更改的建议,但问题是没有三个编辑框。在调查应用程序时,似乎存在ServiceCost对象,每个ServiceCost对象都呈现在三个选项卡中。用户希望能够在三个选项卡中的任何一个选项卡中更改budgetCode字段,并在其他两个选项卡中更新更改。我发现,当更新发生在第三个选项卡中时,对budgetCode字段的更改是有效的,因为它是保存文档时要处理的三个选项卡中的最后一个。您使用哪种选项卡控件?使用
xp:tabbedPanel
,问题不会出现,因为一次只呈现一个选项卡。那么,是ExtLib中的
xe:djTabContainer
还是其他什么东西?是的。我想是EXTLib。我这么说是因为当我开始维护应用程序时,我必须设置某些插件,其中一个插件与ExtLib有关,我想你能提供一个简短的代码示例,来自带有选项卡控件和ServiceCost对象字段的XPages源选项卡吗?更正。选项卡控制器是一个djTabContainer。我已经添加了选项卡控制器和预算代码字段XPage代码。谢谢你迄今为止的帮助。我第一次参与XPages项目