session 范围的托管 bean 和 actionListener

标签 session jsf

我想用同一个按钮对不同的托管 bean 执行多项操作,一个是作用域 session ,另一个是请求。在我的示例中,我对两者使用相同的 bean。

索引.xhtml

    <h:form>
        <p:commandButton image="ui-icon ui-icon-notice" action="#{controller.inc()}" update="result">
            <f:actionListener type="controller.Controller" />
        </p:commandButton>
    </h:form>

    <p:panel id="result">
        #{controller.count}
    </p:panel>

Controller .Controller.java
@Named(value = "controller")
@SessionScoped
public class Controller implements ActionListener, Serializable
{
    int count = 0;

    public Controller(){
        System.out.println("new");
    }

    public void inc(){
        count += 1;
    }

    public int getCount(){
        return count;
    }

    @Override
    public void processAction(ActionEvent event) throws AbortProcessingException{
        count += 1000;
    }
}

当我按下按钮时,计数增加 1,而不是 1001,并创建一个新 bean。我做错什么了 ?

谢谢。

最佳答案

这是预期的行为。 <f:actionListener type>在每个声明中创建并获取自己的 bean 实例。它不重用由 JSF 管理的同一个 session 范围 bean。

您需要使用 binding而是绑定(bind)到已经创建的 session 范围 bean 实例。

<f:actionListener binding="#{controller}" />

关于 session 范围的托管 bean 和 actionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7675319/

相关文章:

java - 使用 selectoneMenu 后 comandLink 不起作用

java - 如何将 JSF 与自定义 servlet 集成?

ruby-on-rails - 使用 Redirect_To 时,Rails 3 通知不起作用

连接多个用户的 R Shiny session

php - php ssh2-将ssh连接资源放在$ _SESSION中

jsf - 动态h :outputScript name attribute in ui:repeat

session - WebBrowser 控制 session 共享?

php - 使用 XAMPP 设置 $_SESSION 在本地主机上不起作用

jsf - 在 View 之间共享组件 - 如何改进我的设计?

Java Server Faces Ajax 请求无法正常工作