2011-06-07 63 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; 
    } 

}