2011-06-07 54 views
1

我有一个屏幕2 JSF Input ComponentsinputTextinputText with suggestionBox。他们都绑定到相同的字段,但只有一个可以被看到/渲染(互斥)。
的事情是,如果我写的一个东西,然后提交,这是不显示其他组件更新模型(同场再次更新)它的值(这是空字符串或空值)。为了解决这个问题,我在我的Class中创建了另一个字段,以便这两个组件不会引用同一个字段。
我不喜欢这样,因为我正在改变我的模型来解决GUI问题。
2互斥输入组件参照相同的字段更新相同的字段两次

我怎么能有2个相互排斥的输入 部件指相同的值 工作,我想要什么?

+0

它应该能够工作。当你说“没有显示的组件”时,我假设你正在使用rendered =“false”来控制它?在ADF Faces中, – 2011-06-07 14:15:20

+0

实际上是'visible = false'。我们不允许出于某种原因使用渲染。输入文本与可见= false我认为是用来传递值不需要在屏幕上的请求。任何解决方法,以获得像渲染一样的行为?可见=假+只读=真或类似的东西? – 2011-06-07 14:29:59

+0

我对ADF Faces一无所知,但我无法想象他们会移除对呈现属性的支持。这对JSF来说非常重要。我会研究一下,因为问题似乎是你不能真正从渲染阶段移除组件 - 你只是将它隐藏起来。 – 2011-06-07 14:33:43

回答

-1

正如我所说所以在这种情况下,使用与readonly truevisible false我不能使用渲染,给我我需要的行为。谢谢。

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

@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; 
    } 

}