2互斥输入组件引用相同的字段正在更新相同的字段两次

时间:2011-06-07 13:31:41

标签: java jsf render visible

我的屏幕上显示2 JSF Input ComponentsinputTextinputText with suggestionBox。它们都绑定到相同的字段,但只有一个可以显示/呈现(互斥)。
问题是如果我在一个中写东西然后提交,那么另一个未显示的组件正在更新模型(同一个字段再次更新) 它的值(空字符串或null)。为了解决这个问题,我在我的类中创建了另一个字段,这样两个组件就不会引用同一个字段。
我不喜欢这个,因为我正在改变我的模型以解决GUI问题。

  

如何进行2次互斥输入   组件引用相同的值   按我的意愿工作?

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 truevisible false给我提供了我需要的行为。感谢。