面板不在命令按钮上渲染点击在primefaces中

时间:2012-06-16 10:06:57

标签: jsf-2 primefaces panel

当我偶然发现这个问题时,我正在玩Primefaces组件......

我有一个示例页面,其中包含以下内容,

<h:form>
  <p:panel id="p1">
  <p:commandButton value="display" actionListener="#{myTestBean.display}" update="p2">     </p:commandButton>

  </p:panel>

  <p:panel id="p2" rendered="#{myTestBean.show}">

  <p:inputText value="#{myTestBean.val1}" id="t1"></p:inputText>
  <p:inputText value="#{myTestBean.val2}" id="t2"></p:inputText>
  <p:commandButton value="click me" update="@form" action="#{myTestBean.disply}"></p:commandButton>

  </p:panel>
   </h:form>

我的支持bean包含以下内容,

 public class Testbean implements Serializable {
    private String val1;
  private String val2;

  private boolean show;

    //getters and setters for the above...

        public void display(){

    if(show == false){
        setShow(true);
    }

}

public void disply(){
    System.out.println("I am here");
    val1 = "hi";
    val2 = "hello";
    if(show == false){
        setShow(true);
    }

}
}

现在,这里的问题是,当我点击我的第一个按钮(显示)时,下面的面板(p2)会被正确渲染。但是,当我点击第二个按钮(单击我)时,面板被隐藏,并且在点击第二个按钮时,它永远不会进入支持bean方法'disply()'。

我在第二个按钮中使用了动作侦听器但是再次使用相同的行为。另外,我在第二个按钮中给出了update =“p2”,即使没有达到我想要的效果。

任何人都可以帮我解决这个问题,让我知道我在做错的地方和地点吗?

谢谢。

2 个答案:

答案 0 :(得分:4)

需要将bean放在视图范围中,以便记住同一视图上的所有先前(ajax)操作。

@ManagedBean
@ViewScoped
public class TestBean {
    // ...
}

当bean被放置在请求范围内时,boolean show将重新初始化为默认false,因此rendered属性将评估false,而JSF正在寻找对于要调用的action方法,因此永远不会找到并调用action方法。

另见:

答案 1 :(得分:0)

使用actionListener="#{myTestBean.display}"时,backinbean方法应为

public void display(**ActionEvent event**){

    if(show == false){
        setShow(true);
    }

}

并且必须声明一个ActionEvent参数。