我的屏幕上显示2 JSF Input Components
:inputText
和inputText with suggestionBox
。它们都绑定到相同的字段,但只有一个可以显示/呈现(互斥)。
问题是如果我在一个中写东西然后提交,那么另一个未显示的组件正在更新模型(同一个字段再次更新) 它的值(空字符串或null)。为了解决这个问题,我在我的类中创建了另一个字段,这样两个组件就不会引用同一个字段。
我不喜欢这个,因为我正在改变我的模型以解决GUI问题。
如何进行2次互斥输入 组件引用相同的值 按我的意愿工作?
答案 0 :(得分:1)
关键是使用呈现的属性来显示/隐藏组件,以便一次只有一个或另一个实际更新模型。这是一个非常基本的例子来说明:
<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;
}
}
答案 1 :(得分:-1)
正如我所说,我不能使用渲染,所以在这种情况下使用readonly true
和visible false
给我提供了我需要的行为。感谢。