会话存在但在简单的java类中访问时会话bean为null

时间:2017-04-11 13:17:21

标签: rest jsf-2.2 managed-bean httpsession

我正在尝试在简单的java类中使用会话范围的bean。我的API会对第二个API进行调用。在拨打电话之前,我在会话bean中保存了一些状态。当问题发生时,用户转到第二个API并重定向回我的API。

我的会话bean是

@ManagedBean
@SessionScoped
public class SessionBean implements Serializable {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;


    /**
     * The Json text of the query when the page is refreshed without saving edit changes.
     */
    private String myJsonText;


    public String getMyJsonText() {
        return myJsonText;
    }

    public void setMyJsonText(String myJsonText) {
        this.myJsonText = myJsonText;
    }
    ///and many more properties
} 

我的regaular java类基本上是一个RESTful POST,下面的方法叫做

@Path("/directory")
public class Directory {

    private static final Logger logger = LoggerFactory.getLogger(Directory.class);


    @POST
    @Path("/create_query")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createQuery(String queryString, @Context HttpServletRequest request) {
        try(Config config = ConfigFactory.get()) {


            HttpSession httpSession =  request.getSession();

            if (httpSession != null)
            {
                logger.error("session is not null: ");
            }else {
                logger.error("session is null : ");
            }


            SessionBean sessionBean = (SessionBean)httpSession.getAttribute("sessionBean");

            if (sessionBean != null)
            {
                sessionBean.setMyJsonText(queryString);
                logger.error("session is not null: ");
            }else {
                logger.error("session is null : ");
            }
            //This is done seperately to see that httpSession is not null but its attribute session bean is
            //Some Database calls made.

                Return user to a .xhtml page with a URL
            }
        } 
    }

现在在代码中注释,我想使用会话bean并设置其一个属性。但我得到会话bean为空的错误。 我知道访问它的问题是因为当我从最后一个函数中将用户带到.xhtml页面时,bean就会保存它的属性。所以它也没有超时。

我不想在这里用

创建一个新的会话bean
 SessionBean sessionBean = null;
 sessionBean.setMyJsonText(queryString);

因为当我对第二个API进行POST调用时,我不想丢失其中的值。我使用@BalusC答案作为参考(我分两步完成。) BalusC's answer

可能是一个详细的教程或指南,这将是有帮助的。如果我在复活节假期前完成它,我将非常高兴:)

由于

0 个答案:

没有答案