سؤال

أنا أتابع مستند ويلد

في القسم 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 لتلبية نقطة الحقن هذه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top