gpt4 book ai didi

session - 在带有 RequestScope 的 ManagedBean 中使用有状态 EJB 时出现问题

转载 作者:行者123 更新时间:2023-12-02 10:40:04 26 4
gpt4 key购买 nike

我在 Glassfish v3 应用服务器中使用 JSF 2.0 和 EJB 3.1。我实际上面临以下问题:
在带有 RequestScope 的 MengedBean 中,我想访问一个 session 对象(带有 @Stateful 的 EJB),它应该存储一些与 session 相关的信息,如所选类别、所选页面(每个类别都有一个数据表分页器)等。 - 没什么特别的想想。
第一次选择类别时,将创建并显示数据表。到目前为止还好。现在,如果单击某个项目(行)(以显示该项目的详细信息)或者应该显示下一页,则会重新创建 session (有状态 EJB),并再次使用默认值来显示和呈现页面。

代码如下:

@ManagedBean
@RequestScoped
public class TableViewBean {

@EJB
SessionBean session;

public DataModel getTable() {
return session.getDataModel();
}

public SessionBean getSession(){
return session;
}
public void next() {
session.getPaginator().nextPage();
session.resetList();
}

public void previous() {
session.getPaginator().previousPage();
session.resetList();
}
// some other code
}

和 session EJB:

@Stateful
public class SessionBean {

private String selectedType = "Entity";

private DataModel dataModel;
private int rowsPerPage = 5;
private Paginator paginator;


public void setSelectedType(String type){
if(!type.equalsIgnoreCase(selectedType)){
selectedType = type;

updateService();
}
resetList();
}


public void resetList() {
dataModel = null;
}

public void resetPagination() {
paginator = null;
}

public int getRowsPerPage() {
return rowsPerPage;
}

public void setRowsPerPage(int rowsPerPage) {
this.rowsPerPage = rowsPerPage;
resetList();
resetPagination();
}

public Paginator getPaginator() {
if (paginator == null) {
paginator = new Paginator(rowsPerPage) {

@Override
public int getItemsCount() {
return selectedService.getCount();
}

@Override
public DataModel createPageDataModel() {
DataModel model = null;
if(selectedService != null){
model = new ListDataModel(....);
}
return model;
}
};
}

return paginator;

}

public DataModel getDataModel() {
if(dataModel == null){
dataModel = getPaginator().createPageDataModel();
}

return dataModel;
}

}

如果我将 ManagedBean 的范围更改为 SessionScope,一切都会正常工作,但由于内存使用问题,我不喜欢这样。

我的代码有什么问题...请帮助我。

格里兹,格里

最佳答案

您的 RequestScoped ManagedBean 会针对每个请求重新实例化(这就是 RequestScoped 的含义)。因此,每次实例化时都会注入(inject)一个 SFSB 实例。

关于session - 在带有 RequestScope 的 ManagedBean 中使用有状态 EJB 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4562941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com