检索所有GET参数的列表?

时间:2014-12-14 09:41:46

标签: jsf java-ee dependency-injection get cdi

是否有一种简单的方法可以使用CDI注入快速获取URL中所有GET参数的列表?

我正在寻找的是:

@Inject
Map<String, String> allGetParams;

1 个答案:

答案 0 :(得分:3)

就像已经说过的那样,你没有开箱即用,但是你可以像CDI 1.1 +那样产生它

public class MyProducer {

    @Produces
    @RequestScoped
    Map<String,String[]> produceParamMap(HttpServletRequest request) {
        return request.getParameterMap();
    }

}

在CDI 1.0中,您必须使用Apache Deltaspike servlet module并编写几乎相同的

public class MyProducer {

    @Produces
    @RequestScoped
    Map<String,String[]> produceParamMap(@Deltaspike HttpServletRequest request) {
        return request.getParameterMap();
    }

}

编辑:更多详情

生成器(使用@Produces注释声明)是一种在CDI中声明bean的方法。这种豆子可以像其他豆子一样注射。这将是:

@Inject
Map<String,String[]> params;

所以你不调用生成器方法,它是用它来实例化bean的CDI容器。

当您使用参数声明一个producer方法时,容器将查找与这些参数匹配的bean以调用该方法。这些bean的存在是在引导时检查的,并且它们不存在抛出异常(就像任何带有未满足bean的注入点一样)。

在这两种情况下,HttpServletRequest类型的bean都是由CDI实现(CDI 1.1+)或Deltaspike框架(CDI 1.0)为您提供的。