gpt4 book ai didi

java - 2 个互斥的InputComponents 引用相同的Field 则更新相同的字段两次

转载 作者:行者123 更新时间:2023-12-01 05:44:29 24 4
gpt4 key购买 nike

我的屏幕上有 2 个 JSF 输入组件:inputTextinputText with suggestBox。它们都绑定(bind)到同一字段,但只有一个可以可见/渲染(互斥)。
问题是,如果我在其中写一些内容然后提交,则另一个未显示的组件正在更新模型(同一字段再次更新)使用它的值(这是空字符串或null)。为了解决这个问题,我在类中创建了另一个字段,以便这两个组件不会引用同一字段。
我不喜欢这样,因为我正在改变我的模型来解决 GUI 问题。

How can I have 2 mutually exclusive input components referring the same value working as I want ?

最佳答案

关键是使用渲染属性来显示/隐藏组件,以便一次只有一个或另一个实际更新模型。这是一个非常基本的示例来说明:

<h:form id="exampleForm" prependId="false">

<h:inputText id="test1" value="#{exampleBean.testString}" rendered="#{exampleBean.toggle}" style="border: 1px solid red;" />
<h:inputText id="test2" value="#{exampleBean.testString}" rendered="#{!exampleBean.toggle}" style="border: 1px solid blue;" />

<h:commandButton id="testButton" action="#{exampleBean.toggle()}" />

</h:form>

以及具有共享属性testString的示例bean:

@ManagedBean(name = "exampleBean")
@ViewScoped
public class ExampleBean {

private String testString;

public String getTestString() { return testString; }

public void setTestString(String testString) {
this.testString = testString;
System.out.println(testString);
}

private boolean toggle;

public boolean isToggle() { return toggle; }
public void setToggle(boolean toggle) { this.toggle = toggle; }

public void toggle() {
toggle = (toggle) ? false : true;
}

}

关于java - 2 个互斥的InputComponents 引用相同的Field 则更新相同的字段两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com