我正在使用JSF 2.0和Richfaces 4.我想让用户点击两个单选按钮中的一个,并让代码显示两个面板中的一个,这些面板开始隐藏。在我的原始项目中,我能够让两个面板显示为未渲染,当我单击其中一个单选按钮时,我可以通过println语句看到确定是否应该呈现每个面板的方法是使用预期输入调用的并在适当时返回true或false,但两个面板都没有呈现。
我在bean中设置单选按钮的目标,以便将其中一个面板初始化为渲染,这样我就能告诉“渲染”代码有效。
以下是代码的精简版/简化版。它甚至更少,因为当我点击单选按钮时,我没有看到方法(checkType())的任何输出确定是否应该显示面板。
这是我的.xhtml
<body>
<h:form id="myForm">
<rich:panel id="formPanel">
<h:selectOneRadio id="myRadio" value="#{myBean.type}"
label="Select one or two" layout="pageDirection">
<f:selectItem itemValue="one" itemLabel="one" />
<f:selectItem itemValue="two" itemLabel="two" />
<a4j:ajax ajaxSingle="true" event="click" immediate="true"
reRender="parentPanel panelOne panelTwo" />
</h:selectOneRadio>
<a4j:outputPanel id="parentPanel">
<rich:panel id="panelOne" rendered="#{myB ean.checkType('one')}">
<div id="divOne">DIV One</div>
</rich:panel>
<rich:panel id="panelTwo" rendered="#{myB ean.checkType('two')}">
<div id="divTwo">DIV Two</div>
</rich:panel>
</a4j:outputPanel>
</rich:panel>
</h:form>
</body>
</html>
这是我的豆子 import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class myBean {
private String type = "two";
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Boolean checkType(String type) {
Boolean tmp = this.type.equalsIgnoreCase(type);
System.out.println("checkType: "+this.type+" == "+type+"? ("+tmp+")");
return tmp;
}
}