【问题标题】:Why rendered is not working on panel为什么渲染在面板上不起作用
【发布时间】: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


【解决方案1】:

此代码有效:

查看:

<h:form id="form">

    <h:panelGroup id="container-panel-1">
        <h:panelGroup id="panel-1" rendered="#{sampleController.showPanel1()}">
            <p:commandButton id="btn-1" value="btn1"
               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" value="btn2"
               actionListener="#{sampleController.button2}" 
               update=":form:container-panel-1, :form:container-panel-2" />
        </h:panelGroup>
    </h:panelGroup>
</h:form>

豆子:

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class SampleController implements Serializable {

    private boolean showPanel;

    public void button1() {
        showPanel = false;
    }

    public void button2() {
        showPanel = true;
    }

    public boolean showPanel1(){
        return showPanel;
    }

    public boolean showPanel2(){
        return ! showPanel;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2017-09-22
    • 1970-01-01
    • 2021-11-06
    • 2017-01-24
    • 2023-02-08
    相关资源
    最近更新 更多