CDI InjectionPoint @httpparam مشكلة
سؤال
أنا أتابع مستند ويلد
في القسم 4.11. كائن نقطة الحقن
هناك مثال مثير للاهتمام حول كيفية الحصول على معلمة HTTP باستخدام CDI
لكنني قمت بنسخ الكود إلى NetBeans ، كل شيء يجمعه ، ولكن لديه خطأ في النشر
سبب: org.jboss.weld.exceptions.deploymentException: Weld-001408 نقطة الحقن لها تبعيات غير راضية. نقطة الحقن: المعلمة 1 من java.lang.string com.test.httpparamproducer.getParamvalue (javax.enterprise.inject.spi.injectionpoint ، javax.servlet.servletrequest) ؛ التصفيات: [@javax.enterprise.inject.default ()
كيفية حل هذه المشكلة؟؟؟
public class HttpParamProducer {
@HttpParam("")
@Produces
String getParamValue(
InjectionPoint ip, ServletRequest request) {
return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
}
}
المحلول 2
يبدو أنه بعد عامين ، لا يزال هذا السؤال مهتمًا
هذا هو المجيء القصير لمواصفات CDI ، حيث لا يتطلب من الحاوية فضح httpservletrequest كحبة قابلة للحقن
هنا عمل معقول حوله
@WebListener
public class HttpServletRequestProducer implements ServletRequestListener {
private final static ThreadLocal<HttpServletRequest> holder = new ThreadLocal<HttpServletRequest>();
@Override
public void requestDestroyed(ServletRequestEvent sre) {
holder.remove();
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
holder.set((HttpServletRequest)sre.getServletRequest());
}
@Produces @RequestScoped HttpServletRequest get() {
return holder.get();
}
}
الآن ، ستعمل httpservletrequest كما هو متوقع
ترميز سعيد
نصائح أخرى
يتم حقن كل معلمة على طريقة المنتج ، ولا يوفر أي من الفاصوليا (بما في ذلك المنتجين) نوع API servletrequest لتلبية نقطة الحقن هذه.