Primefaces 如何检测单击按钮的名称并设置要计算的布尔变量?

Primefaces 如何检测单击按钮的名称并设置要计算的布尔变量?,primefaces,actionlistener,actionevent,Primefaces,Actionlistener,Actionevent,我有一个actionListener来检测何时单击命令按钮,然后我打算将一个布尔变量设置为true,并在另一个要执行的方法中对其求值;如果为真,则加载一些项目;如果为false,则加载另一个项: xhtml: <h:form id="myFormID" ... > <p:commandButton id="myButtonID" value="Some Title" action="#{myController.pressedFilter()}" actionListe

我有一个actionListener来检测何时单击命令按钮,然后我打算将一个布尔变量设置为true,并在另一个要执行的方法中对其求值;如果为真,则加载一些项目;如果为false,则加载另一个项:

xhtml:

<h:form id="myFormID" ... >
    <p:commandButton id="myButtonID" value="Some Title" action="#{myController.pressedFilter()}" actionListener="#{myController.checkClicked}" />
...
</h:form>

...
控制器类:

//the boolean variable:
private boolean clicked;

public boolean isClicked() {
    return clicked;
}

public void setClicked(boolean clicked) {
    this.clicked = clicked;
}

//the actionListener to detect the button clicked:
public boolean checkClicked(ActionEvent ev) {
    String buttonClickedID = ev.getComponent().getClientId();

    if (buttonClickedID.equals("myFormID:myButtonID")) {
        setClicked(true);
    }

    return clicked;
}

//the method to retrieve the items:
public Collection<T> getItems() {
    if (isClicked()) {
        items = this.ejbFacade.findSomeItems();
    } else if (!isClicked()) {
        items = this.ejbFacade.findAnotherItems();
    } 
return items;
}

//clears all datatable filters:
public String pressedFilter() {
    clearAllFilters();
    return "/app/index";
}
//布尔变量:
私有布尔值;
公共布尔值isClicked(){
点击返回;
}
已单击公共void集(已单击布尔值){
this.clicked=单击;
}
//要检测单击的按钮的actionListener:
已单击公共布尔值检查(ActionEvent ev){
String buttonClickedID=ev.getComponent().getClientId();
if(buttonClickedID.equals(“myFormID:myButtonID”)){
setClicked(true);
}
点击返回;
}
//检索项目的方法:
公共集合getItems(){
如果(isClicked()){
items=this.ejbFacade.findSomeItems();
}如果(!isClicked()),则为else{
items=this.ejbFacade.findAnotherItems();
} 
退货项目;
}
//清除所有数据表筛选器:
公共字符串pressedFilter(){
clearAllFilters();
返回“/应用程序/索引”;
}
不幸的是,我不知道为什么它没有像我预期的那样工作

如果单击命令按钮,布尔变量将设置为true;但是当评估它时,我不知道为什么这个值是假的

有人能解释一下我做错了什么,并帮助我修复它,让它像我描述的那样工作吗


提前感谢。

如评论中所述。问题是您使用的是
@ViewScoped
bean,每次视图更改(例如浏览器刷新)时都会重新创建该bean。请查看:


因此,将bean范围更改为
@SessionScoped
可能会解决问题。

您的bean范围是什么?它与@ViewScoped正常工作。好吧,这可能就是问题所在。因为每次视图更改(浏览器刷新)时都会重新创建它。尝试使用@SessionScoped bean。@RhuanKarlus:或deltaspike的
@ViewAccessScoped
:@Rhuan Karlus,你说得对!!非常感谢你!!请将其作为答案发布,以便我检查是否已解决。