2016-07-18 11 views
1

私はクエリパラメータを読み込むWebアプリケーションを持っています。このパラメータを使用して、outside-app-sourceからデータを取得します。 Webアプリケーションはシンプルなサーブレットです。JavaEE CDI注入 - HttpServletRequest/Responseを挿入できません

@WebServlet(name = "SomethingServlet", urlPatterns = {"/"}, loadOnStartup = 0) 
public class SomethingServlet extends HttpServlet { 

    @Inject 
    InterfaceOfDesire objectOfDesire; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     objectOfDesire.doSomething(); 
    } 
} 

InterfaceOfDesireは(atm)を一度実装したインターフェイスです。したがって、あいまいさはありません。

public interface InterfaceOfDesire { 
    void doSomething(); 
} 


public class ClassOfDesire implements InterfaceOfDesire { 
    @Override 
    public void doSomething() { 
     // do something very cool 
    } 
} 

そして最後に、ではなく、少なくとも実装クラス(ATMのみ1)の種類を解決するリゾルバがある

public class SomethingResolver { 
    @Inject 
    private HttpServletRequest request; 
    @Inject 
    private HttpServletResponse response; 

    @Inject 
    public SomethingResolver(ServletContext servletContext) { 
     // do something with the servlet context 
    } 

    @Produces 
    public InterfaceOfDesire getInstance() { 
     // do something with request and response 
     // afterwards return object 
     return new ClassOfDesire(); 
    } 
} 

今、私はエラーを取得する

WELD-001408: Unsatisfied dependencies for type HttpServletResponse with qualifiers @Default 

何午前私は間違っている?

+0

'@ Inject'を' @ Named' +スコープアノテーション( '@ ApplicationScoped'など)で使用しているクラスにマークを付けましたか?' ViewScoped'と 'SessionScoped'は'直列化可能である。 – Milkmaid

+0

どのコンテナに展開していますか?バージョンを含めます。 –

答えて

0

私は、bean(SomethingResolver)を何らかの形でHTTPリクエストまたはそのセッションにバインドする必要があると言います。それだけがHttpServletRequest(または応答)へのアクセスを得ることができます。

@RequestScopedと注釈を入れてみてください。 @SessionScopedも同様に機能する可能性があります。

これは、現在の方法では、Beanのライフサイクルがリクエストにバインドされていないため、リクエストよりも長くなることがあります。 CDIには、どのサーブレット要求をそれに注入すべきかを知らせる方法がありません。

関連する問題