关键是要使用呈现的属性来显示/隐藏组件,以便一次只有一个或另一个实际上更新模型。下面是示出了非常基本的例子:
<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