在素面中单击命令按钮时面板未呈现

问题描述 投票:0回答:4

当我偶然发现这个问题时,我正在摆弄 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”,即使这样也没有产生我想要的结果。

有人可以帮我解决这个问题并让我知道我做错了什么地方吗?

谢谢你。

jsf-2 primefaces panel
4个回答
4
投票

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

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

当 bean 被放置在请求作用域中时,

boolean show
将被重新初始化为默认的
false
,因此
rendered
属性将在 JSF 寻找要调用的操作方法时评估
false
,因此永远不会找到并调用操作方法。

另请参阅:


0
投票

我将按钮包围起来,如下图所示

<h:form>
    <h:commandButton styleClass="toggle_btn" action="#{buttonNavBean.show()}" style=" font-family: sans-serif; color: black;" value="Sign In/Sign Up"></h:commandButton>
 </h:form>

0
投票

我也面临着同样的挑战。我试图在网上搜索,但一切都是徒劳。但经过几次尝试,我发现,由于我使用

commandButton
来设置渲染面板的值,因此无法计算出
UIForm
,因此,我用
包围了
commandButton
 UIForm
并且它按照我想要的方式正常工作。


0
投票

当使用actionListener =“#{myTestBean.display}”时,backinbean方法应该是

公共无效显示(ActionEvent事件){

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

}

必须声明 ActionEvent 参数

© www.soinside.com 2019 - 2024. All rights reserved.