【发布时间】:2015-04-09 14:04:28
【问题描述】:
如何动态显示或隐藏面板?
在下面给出的示例中,当我单击 btn-1 时,panel-2 显示和 panel-1 隐藏。但是当我点击btn-2 时,什么也没有发生。
ManagedBean
@ManagedBean
@ViewScoped
public class SampleController implements Serializable {
private Boolean showPanel;
public void button1() {
showPanel = Boolean.FALSE;
}
public void button2() {
showPanel = Boolean.TRUE;
}
public Boolean showPanel1(){
return showPanel;
}
public Boolean showPanel2(){
return ! showPanel;
}
}
XHTML
<h:form id="form">
<h:panelGroup id="container-panel-1">
<h:panelGroup id="panel-1" rendered="#{sampleController.showPanel1()}">
<p:commandButton id="btn-1"
actionListener="#{sampleController.button1}"
update=":form:container-panel-1, :form:container-panel-2" />
</h:panelGroup>
</h:panelGroup>
<h:panelGroup id="container-panel-2">
<h:panelGroup id="panel-2" rendered="#{sampleController.showPanel2()}">
<p:commandButton id="btn-2"
actionListener="#{sampleController.button2}"
update=":form:container-panel-1, :form:container-panel-2" />
</h:panelGroup>
</h:panelGroup>
</h:form>
我希望你能帮我解决这个问题。
谢谢你, 贝尔
【问题讨论】:
-
给定的代码在
showPanel2()上抛出 NPE。一旦你通过使用boolean而不是Boolean来解决这个问题,它就对我有用。您的问题的原因在目前提供的信息中不可见。我最好的猜测是你从错误的包中导入了@ViewScoped,导致JSF托管bean范围默认为@RequestScoped,然后stackoverflow.com/questions/2118656/…的第5点将适用。 -
您好 BalusC,我将
Boolean更改为boolean并检查了我使用的包是import javax.faces.bean.ViewScoped;。当我单击按钮 2 时仍然没有任何反应。您在哪里看到异常?我在控制台中没有看到任何异常。谢谢 -
如果您没有看到异常并且仍然遇到所描述的问题,那么您可能遇到了更大的问题:开发环境和/或项目严重混乱。我只是从头开始。
标签: jsf panel rendered-attribute