2015-04-09 10 views
0

Как можно динамически отображать или скрывать панель?Почему визуализация не работает на панели

Приведенный ниже пример, когда я нажимаю 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> 

Я надеюсь, что вы можете помочь мне с этим.

Спасибо, Bell

+2

Данный код бросает NPE на 'showPanel2()' , Как только вы исправите это, используя 'boolean' вместо' Boolean', он работает для меня. Причина вашей проблемы не видна в представленной до сих пор информации. Мое лучшее предположение заключалось в том, что вы импортировали '@ ViewScoped' из неправильного пакета, что привело к тому, что область видимости управляемого JSF по умолчанию была' @ RequestScoped', на которой затем был указан пункт № 5 http://stackoverflow.com/questions/2118656/commandlink -commandbutton-ajax-backing-bean-action-listenener-method-not-calledoked/2120183 # 2120183. – BalusC

+0

Здравствуйте, BalusC, я меняю 'Boolean' на' boolean' и проверял пакет, который я использовал, это 'import javax.faces.bean.ViewScoped;'. Все еще ничего не происходит, когда я нажимаю кнопку 2. Где вы видели Исключение? Я не вижу никаких исключений в консоли. Спасибо – bell

+0

Если вы не видите исключения и все еще имеете описанную проблему, тогда у вас, вероятно, будет большая проблема: серьезно запутанная среда разработки и/или проект. Я бы просто перезапустил с нуля. – BalusC

ответ

0

Этот код работает:

Вид:

<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> 

Bean:

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; 
    } 
}