關鍵是要使用呈現的屬性來顯示/隱藏組件,以便一次只有一個或另一個實際上更新模型。下面是示出了非常基本的例子:
<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;
}
}
它應該能夠工作。當你說「沒有顯示的組件」時,我假設你正在使用rendered =「false」來控制它?在ADF Faces中, – 2011-06-07 14:15:20
實際上是'visible = false'。我們不允許出於某種原因使用渲染。輸入文本與可見= false我認爲是用來傳遞值不需要在屏幕上的請求。任何解決方法,以獲得像渲染一樣的行爲?可見=假+只讀=真或類似的東西? – 2011-06-07 14:29:59
我對ADF Faces一無所知,但我無法想象他們會移除對呈現屬性的支持。這對JSF來說非常重要。我會研究一下,因爲問題似乎是你不能真正從渲染階段移除組件 - 你只是將它隱藏起來。 – 2011-06-07 14:33:43