-4

我如何在一些不是 servlet 的 java 类中使用 session.getAttribute 。可能是这样的东西或其他一些技巧?

<%    
    <jsp:useBean id="bean" class="ProfitBean" scope="application"/>
        <jsp:setProperty name="bean" value='<%=session.getAttribute("idUser")%>'/>
    %>

    public class ProfitBean{
    private int idUser;
    public void setIdUser(int IdUser){
    ...
    }
    public int getIdUser(){
    ...
    }
    }



    public class SomeClass{
    public void doSomething(){
    ProfitBean pb =new ProfitBean
    int userId = pb.getIdUser();

    }
    }
4

2 回答 2

0

一个会话需要一个请求。因此,请求必须将 userId 传递给您的 Application-Scope-ProfitBean。

在这种情况下,您可以使用 Singleton 反模式,因此 ProfitBean.getInstance().get/setIdUser() 将包含相同的值。

private static ProfitBean profitBeanInstance;

@Deprecated
public ProfitBean(){
    profitBeanInstance=this;
}

public static ProfitBean getInstance(){
    if (profitBeanInstance == null) {
        NullPointerException cause = new NullPointerException();
        throw new IllegalStateException("The instance has not been created by blabla.jsp!", cause);
    }
    return profitBeanInstance;
}

警告:此 Singleton 将可供任何用户使用。在“SomeClass”中,您无法确定是哪个用户设置了此值。

于 2013-01-30T22:12:14.980 回答
0

如果班级不能得到它,它应该要求它。

换句话说,只需在调用方法时将所需的值传递给它。

someClass.doSomething(session.getAttribute("idUser"));

或者,取决于上下文。

someClass.doSomething(profitBean);
于 2013-01-31T02:49:35.083 回答