<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  回復  更多評論   
     
    主站蜘蛛池模板: 99re免费在线视频| 四虎在线视频免费观看视频| 波多野结衣久久高清免费| 精品亚洲AV无码一区二区| 黄色成人免费网站| 久久久久se色偷偷亚洲精品av| 久久www免费人成看片| 亚洲免费视频网址| 一二三四免费观看在线视频中文版 | 亚洲欧洲一区二区三区| 曰批全过程免费视频免费看| 亚洲成?v人片天堂网无码| 成人国产网站v片免费观看| 国产啪亚洲国产精品无码| aa毛片免费全部播放完整| 亚洲国产精品一区二区久久hs| 黄页免费在线观看 | 一个人看的www在线免费视频| 久久久久噜噜噜亚洲熟女综合| 水蜜桃视频在线观看免费播放高清| 国产AV无码专区亚洲AV手机麻豆| 日韩av无码免费播放| 亚洲人成亚洲精品| 最近最好的中文字幕2019免费 | 天天综合亚洲色在线精品| 亚洲国产精品综合久久一线| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲日本va中文字幕久久| 91精品成人免费国产片| 日韩精品亚洲专区在线影视| 亚洲色自偷自拍另类小说 | 黄瓜视频高清在线看免费下载| 噜噜噜亚洲色成人网站| 久久精品视频亚洲| 67194成是人免费无码| 国产男女爽爽爽免费视频 | 4399影视免费观看高清直播| 亚洲熟妇无码AV不卡在线播放| 亚洲AⅤ无码一区二区三区在线| 久久青草91免费观看| 亚洲国产午夜精品理论片在线播放 |