如何从Web服务获取JSF应用程序范围的Bean?

时间:2019-04-29 10:12:37

标签: rest jsf applicationcontext application-scope

我有一个没有Spring的jsf 2.0应用程序,我已经实现了一个缓存作为应用程序范围,应该从Rest服务中访问它。现在,我想调用应该检查缓存的其余Web服务,但是当我要访问它时,它始终为null。

我已经尝试Accessing FacesContext from Web Service和这个https://www.mkyong.com/jsf2/how-to-get-servletcontext-in-jsf-2/了,但这对我不起作用。

@ManagedBean(eager=true)
@ApplicationScoped
public class CacheController implements Serializable{

    private static final long serialVersionUID = 123L;

    private Map<String, Cache> map = new HashMap<String, Cache>();

    public Map<String, Cache> getMap() {
        return map;
    }

    public void setMap(Map<String, Cache> map) {
        this.map = map;
    }

}


@Path("/service")
public class RestService {

    @POST
    @Path("anlieferung/kennzahlen")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public String getValueFromCache(String item) throws JSONException, ParseException {

                //is always null
        CacheController cacheController= (CacheController) getServletContext().getAttribute("cacheController");

                //is always null
        FacesContext context = FacesContext.getCurrentInstance();
            Application application = context.getApplication();
            CacheController cacheBean = application.evaluateExpressionGet(context, "#{cacheController}", CacheController.class);

        //doSomeStuff and check if the item is in the Cache (CacheController.getMap())
        }
}

我在通过jsf应用程序之前已经初始化了缓存,并且它可以正常工作。现在,我希望可以通过FacesContent或ServletContext获取Cache Object,但是它始终为null。我需要创建类似ServletListener的东西吗?有人可以给我一个例子吗?谢谢

0 个答案:

没有答案