代码之家  ›  专栏  ›  技术社区  ›  jMarcel

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

  •  0
  • jMarcel  · 技术社区  · 6 年前

    我有一个actionlistener来检测何时单击了命令按钮,然后我打算将布尔变量设置为true,并在另一个要执行的方法中对其求值;如果它为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";
    }
    

    不幸的是,我不知道为什么它没有按我的预期工作。

    如果单击命令按钮,布尔变量将设置为true;但是在计算时,我不知道为什么值为false。

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

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   R. Karlus    6 年前

    如评论所述。问题是你用的是 @ViewScoped bean,每次视图更改时都会重新创建(例如浏览器刷新)。过来看: JSF Scopes 是的。

    所以,将bean范围更改为 @SessionScoped 可以解决问题。