<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 羅明 閱讀(4058) 評論(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  回復  更多評論   
     
    主站蜘蛛池模板: 亚洲a在线视频视频| 亚洲人成影院77777| 久久狠狠躁免费观看2020| 亚洲精品无AMM毛片| 亚洲精品视频在线播放| 国产亚洲精品成人AA片新蒲金 | 免费看一级做a爰片久久| 无码国产精品一区二区免费式影视| 亚洲国产精品午夜电影| 亚洲精品美女久久久久99| 日韩不卡免费视频| 免费无码一区二区| 亚洲欧美黑人猛交群| 亚洲一区中文字幕在线电影网| 亚洲成人在线网站| 亚洲国产精华液网站w| 女人被男人桶得好爽免费视频 | 亚洲高清资源在线观看| 免费人成在线观看播放国产| a毛片视频免费观看影院| 亚洲色最新高清av网站| 亚洲av片不卡无码久久| 伊伊人成亚洲综合人网7777| 永久免费av无码网站韩国毛片| 91精品导航在线网址免费| 久久久精品免费视频| 久久青草国产免费观看| 亚洲a∨国产av综合av下载| 亚洲精品一卡2卡3卡四卡乱码| 亚洲处破女AV日韩精品| 亚洲国产精品无码中文字| 久久精品亚洲综合专区| 亚洲国产国产综合一区首页| 亚洲高清无码专区视频| 亚洲国产天堂久久久久久| 亚洲熟伦熟女新五十路熟妇 | 亚洲一区二区三区国产精华液| 亚洲午夜理论片在线观看| 亚洲成a人无码亚洲成www牛牛| 国产精品亚洲一区二区无码| 亚洲国产成+人+综合|