2017-03-29 8 views
2

私は、GuiceをDIフレームワークとして使用し、HibernateをOrmとして使用してJavaアプリケーションを作成しています。私はjspページのカップルを提供するために単純な埋め込みJettyサーバーを実行したい。私は私のjspでいくつかのデータを追加するための簡単な豆のカップルを使用するようになりまし希望JSP beanのGuiceインジェクション

Server server = new Server(8081); 
final WebAppContext webAppContext = new WebAppContext(); 
webAppContext.setContextPath("/rpga"); 
webAppContext.setResourceBase("web/WEB-INF/"); 
webAppContext.setDescriptor("web/WEB-INF/web.xml"); 
webAppContext.setParentLoaderPriority(true); 

final Configuration.ClassList classlist = Configuration.ClassList.setServerDefault(server); 
classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration","org.eclipse.jetty.annotations.AnnotationConfiguration"); 

webAppContext.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$|.*/classes/.*"); 

webAppContext.setServer(server); 

server.setHandler(webAppContext); 
server.start(); 
server.join(); 

:私は、次のコードを使用してサーバを実行するために管理しました。私は豆を作り、それに私のdaoを注入しようとしましたが、豆はGuiceによって管理されていないので、Daoは注入されません。

私のJSPは

<html> 
    <head> 
     <title>Playlist</title> 
    </head> 
    <body> 
     <jsp:useBean id="playlist" class="com.duom.beans.PlaylistBean" /> 
     ...do stuff with playlistBean 
    </body> 
</html> 

そして、私の豆のようになります。

import com.google.inject.Inject; 

public class PlaylistBean { 

    @Inject 
    private PlaylistDao playlistDao; 

    ...do stuff 
} 

私は自分の目標を達成するために何をしないのですか?

+0

私はあなたができるとは思わない。 JSPでDIを使用するには、Java EEのCDIフレームワークを使用する必要があります。インスタンスを取得するためにGuiceインジェクタに直接渡されるファクトリを呼び出す独自のJSPタグを作成したい場合を除きます。 (これは間違いなくハックであり、良いものではないことに注意してください)。 –

+0

返信いただきありがとうございます、私は最後に解決策を見つけることができました、私の答えは以下を参照してください! – Duom

答えて

1

私は私の問題の解決策を見つけることができました。私は自分の意図を明確にし、適切な技術を使って開発者を再開させました。私はJSF2にJSPから切り替え

、私はGuiceのインジェクタのためのファクトリクラスを作成しました:

public class GuiceFactory { 

    private static final Injector injector = Guice.createInjector(new RpgaAppModule()); 

    public static Injector getInjector() { 
     return injector; 
    } 
} 

その後、私は呼んで私の豆の各コンストラクタに:

GuiceFactory.getInjector().injectMembers(this); 

は、することを躊躇しないでください。デザインやアーキテクチャに関して私のソリューションが間違っている場合はコメントしてください。

関連する問題