<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    1. 按照以下代碼改寫你自己的Activator (或者將代碼中的"/pages"改成你的jsf網頁路徑):
    注意加粗的那段代碼(使用當前的class loader來加載jsf的FacesServlet)

    package net.andyluo.singlife.jsf.demo;

    import java.io.IOException;
    import java.util.Dictionary;
    import java.util.Hashtable;

    import javax.faces.webapp.FacesServlet;
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;

    import org.eclipse.equinox.http.helper.BundleEntryHttpContext;
    import org.eclipse.equinox.http.helper.ContextPathServletAdaptor;
    import org.eclipse.equinox.jsp.jasper.JspServlet;
    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
    import org.osgi.framework.ServiceReference;
    import org.osgi.service.http.HttpContext;
    import org.osgi.service.http.HttpService;
    import org.osgi.util.tracker.ServiceTracker;

    import com.sun.faces.config.ConfigureListener;

    public class Activator implements BundleActivator 
    {

        
    private ServiceTracker httpServiceTracker;

        
    public void start(BundleContext context) throws Exception 
        
    {
            httpServiceTracker 
    = new HttpServiceTracker(context);
            httpServiceTracker.open();
        }


        
    public void stop(BundleContext context) throws Exception 
        
    {
            httpServiceTracker.close();
        }


        
    private class HttpServiceTracker extends ServiceTracker 
        
    {

            
    private static final String PATH = "/jsf";

            
    public HttpServiceTracker(BundleContext context) 
            
    {
                
    super(context, HttpService.class.getName(), null);
            }


            
    public Object addingService(ServiceReference reference) 
            
    {
                
    final HttpService httpService = (HttpService) context
                        .getService(reference);
                
    try 
                
    {
                    HttpContext commonContext 
    = new BundleEntryHttpContext(context
                            .getBundle(), 
    "/pages");
                    httpService.registerResources(PATH, 
    "/", commonContext);

                    JspServlet jspServlet 
    = new JspServlet(context.getBundle(),
                            
    "/pages");
                    Servlet adaptedJspServlet 
    = new ContextPathServletAdaptor(
                            jspServlet, PATH);
                    httpService.registerServlet(PATH 
    + "/*.jsp", adaptedJspServlet,
                            
    null, commonContext);

                    Dictionary initparams 
    = new Hashtable();
                    initparams.put(
    "servlet-name""Faces Servlet");
                    Servlet adaptedFacesServlet 
    = new ServletContextListenerServletAdaptor(
                            
    new ConfigureListener(), new
     FacesServlet(), jspServlet
                                    .getJspLoader());

                    adaptedFacesServlet 
    = new ContextPathServletAdaptor(
                            adaptedFacesServlet, PATH);
                    httpService.registerServlet(PATH 
    + "/*.jsf",
                            adaptedFacesServlet, initparams, commonContext);

                }
     catch (Exception e) 
                
    {
                    e.printStackTrace();
                }

                
    return httpService;
            }


            
    public void removedService(ServiceReference reference, Object service) 
            
    {
                
    final HttpService httpService = (HttpService) service;
                httpService.unregister(PATH); 
    //$NON-NLS-1$
                httpService.unregister(PATH + "/*.jsp"); //$NON-NLS-1$
                httpService.unregister(PATH + "/*.jsf"); //$NON-NLS-1$            
                super.removedService(reference, service);
            }

        }


        
    public class ServletContextListenerServletAdaptor implements Servlet 
        
    {
            
    private ServletConfig config;

            
    private ServletContextListener listener;

            
    private Servlet delegate;

            
    private ClassLoader jspLoader;

            
    public ServletContextListenerServletAdaptor(
                    ServletContextListener listener, Servlet delegate,
                    ClassLoader jspLoader) 
            
    {
                
    this.listener = listener;
                
    this.delegate = delegate;
                
    this.jspLoader = jspLoader;
            }


            
    public void init(ServletConfig config) throws ServletException 
            
    {
                
    this.config = config;
                ClassLoader original 
    = Thread.currentThread()
                        .getContextClassLoader();
                
    try 
                
    {
                    Thread.currentThread().setContextClassLoader(jspLoader);
                    listener.contextInitialized(
    new ServletContextEvent(config
                            .getServletContext()));
                    delegate.init(config);
                }
     finally 
                
    {
                    Thread.currentThread().setContextClassLoader(original);
                }

            }


            
    public void service(ServletRequest req, ServletResponse resp)
                    
    throws ServletException, IOException 
            
    {
                ClassLoader original 
    = Thread.currentThread()
                        .getContextClassLoader();
                
    try 
                
    {
                    Thread.currentThread().setContextClassLoader(jspLoader);
                    delegate.service(req, resp);
                }
     finally 
                
    {
                    Thread.currentThread().setContextClassLoader(original);
                }

            }


            
    public void destroy() 
            
    {
                ClassLoader original 
    = Thread.currentThread()
                        .getContextClassLoader();
                
    try 
                
    {
                    Thread.currentThread().setContextClassLoader(jspLoader);
                    delegate.destroy();
                    listener.contextDestroyed(
    new ServletContextEvent(config
                            .getServletContext()));
                    config 
    = null;
                }
     finally 
                
    {
                    Thread.currentThread().setContextClassLoader(original);
                }

            }


            
    public ServletConfig getServletConfig() 
            
    {
                
    return config;
            }


            
    public String getServletInfo() 
            
    {
                
    return "";
            }

        }


    }


    2. 因為JspServlet中沒有返回class loader的方法,所以我們要更改一下JspServlet的實現代碼(hack一下):更改equinox的org.eclipse.equinox.jsp.jasper_*.jar中的org.eclipse.equinox.jsp.jasper.JspServlet類:(可以下載JspServlet的源代碼,在本地更改編譯成功后將class文件覆蓋到org.eclipse.equinox.jsp.jasper_*.jar中)

    添加以下方法:
        public ClassLoader getJspLoader()
        {
            return this.jspLoader;
        }

    如此即可^_^, 其實就是讓FacesServlet使用JspServlet的ClassLoader,這樣就不會出現"Can't find FacesContext"錯誤了。

    參考: [news.eclipse.technology.equinox] JSF, Equinox & FactoryFinder



    版權所有 羅明
    posted on 2007-10-08 15:05 羅明 閱讀(4071) 評論(25)  編輯  收藏 所屬分類: JavaOSGiJSF
    Comments
    • # re: 讓OSGi支持JSF Web開發
      Yu Liu
      Posted @ 2008-01-24 01:30
      請問,我就是按照您這個帖子所說的做的,為什么jsf的組件沒有顯示出來呢,問題有可能在哪里呢? 我沒有用facese config的配置,問題應該不是這里吧  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      羅明
      Posted @ 2008-01-24 09:25
      你加上faces-config.xml再試試,應該要這個配置文件的  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      Yu Liu
      Posted @ 2008-01-24 18:01
      謝謝答復! 請問你手頭有沒有可以運行的jsf和osgi的小例子,有能夠發給我一份嗎? 這是我的信箱 dogwood.liu@gmail.com  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      Yu Liu
      Posted @ 2008-01-24 21:01
      我定義了配置文件,頁面能被osgi正確找到,可是組建還是顯示不出來,就是一個空白的頁,非jsf的組建能夠顯示出來,jsf的不行。另外配置文件應該放在哪個目錄呢,我房子和jsf文件的同一個目錄沒用啊  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      羅明
      Posted @ 2008-01-24 22:43
      把demo發給你了,你看看里面的目錄結構  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      Yu Liu
      Posted @ 2008-01-25 09:33
      謝謝啊! 我看了你那個demo的文件結構了,好像不能夠直接運行。我自己按照你那樣的目錄結構弄了一個,但是運行的時候找不到 faceservlet 或者 configlistener. 很是奇怪,我編譯的時候沒事,但是運行的時候不行,我已經把我自己弄得那個plugin發給你了,不知道你有沒有時間看看,我哪里配置的不對  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      Yu Liu
      Posted @ 2008-01-25 11:30
      請問你用不用 qq msn 或者 googletalk 什么的,有些問題想在線請教一下  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      羅明
      Posted @ 2008-01-25 15:04
      都用,頁面上有三個的聯系方式  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      lmr
      Posted @ 2008-03-03 10:43
      能否發給我一份
      lialiks@163.com
      謝謝  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      gembin
      Posted @ 2008-05-25 18:20
      給我發1份Demo,急需阿,十分感謝!!gembin@gmail.com
      請問如何讓JBoss的Ajax4JSF,RichFaces運行在OSGi 環境下  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      傳奇世界私服
      Posted @ 2008-05-31 10:44
      4968  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      傳世私服
      Posted @ 2008-05-31 10:44
      6125  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:44
      1315  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:44
      9608  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:47
      7313  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:47
      7655  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:48
      3423  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:48
      6475  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:48
      7937  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:48
      0480  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:48
      9379  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:48
      2937  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:49
      0665  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:49
      3271  回復  更多評論   
    • # re: 讓OSGi支持JSF Web開發
      魔獸世界私服
      Posted @ 2008-05-31 10:49
      1268  回復  更多評論   
     
    主站蜘蛛池模板: 国产激情久久久久影院老熟女免费 | 相泽亚洲一区中文字幕| 国产免费人成在线视频| 亚洲日韩国产一区二区三区| 国产偷国产偷亚洲清高动态图 | 亚洲av手机在线观看| 成年女人毛片免费播放视频m| 欧美在线看片A免费观看| 免费一级毛片不卡在线播放| 日本红怡院亚洲红怡院最新| 亚洲好看的理论片电影| 亚洲性色AV日韩在线观看| 亚洲?v女人的天堂在线观看| 亚洲精品无码你懂的| 久久青草国产免费观看| 91在线视频免费91| 国产成人亚洲综合| 国产精品免费久久| 亚洲第一极品精品无码久久| 99视频在线精品免费| 又粗又大又长又爽免费视频| 青青视频免费在线| 国产精品怡红院永久免费| 免费v片在线观看品善网| eeuss草民免费| 久久亚洲精品无码| 九九99热免费最新版| 免费无码又爽又刺激毛片| 亚洲gv猛男gv无码男同短文| 国产精品亚洲专区一区| 1000部免费啪啪十八未年禁止观看| 亚洲精品网站在线观看不卡无广告| 国产午夜亚洲精品| 日韩电影免费在线观看| 91亚洲视频在线观看| 亚洲女初尝黑人巨高清| 曰批全过程免费视频网址| 亚洲狠狠狠一区二区三区| 天黑黑影院在线观看视频高清免费| 猫咪社区免费资源在线观看| 香蕉视频在线观看免费|