2011-01-28 8 views
0

jsfコンポーネントで生成されたhtmlのheadタグにjavascriptとcssファイルをインポートするにはどうすればよいですか?私はこの目的のためにリソースを使用することに関するいくつかの記事を見つけました。 (:http://technology.amis.nl/blog/6047/creating-a-custom-jsf-12-component-with-facets-resource-handling-events-and-listeners-valueexpression-and-methodexpression-attributesソース)と同様カスタムjsfコンポーネントのheadタグでjavascriptとcssをインポート

protected void writeScriptResource(
     FacesContext context, 
     String  resourcePath) throws IOException 
     { 
     Set scriptResources = _getScriptResourcesAlreadyWritten(context); 

     // Set.add() returns true only if item was added to the set 
     // and returns false if item was already present in the set 
     if (scriptResources.add(resourcePath)) 
     { 
      ViewHandler handler = context.getApplication().getViewHandler(); 
      String resourceURL = handler.getResourceURL(context, SCRIPT_PATH +resourcePath); 
      ResponseWriter out = context.getResponseWriter(); 
      out.startElement("script", null); 
      out.writeAttribute("type", "text/javascript", null); 
      out.writeAttribute("src", resourceURL, null); 
      out.endElement("script"); 
     } 
     } 

     private Set _getScriptResourcesAlreadyWritten(
     FacesContext context) 
     { 
     ExternalContext external = context.getExternalContext(); 
     Map requestScope = external.getRequestMap(); 
     Set written = (Set)requestScope.get(_SCRIPT_RESOURCES_KEY); 

     if (written == null) 
     { 
      written = new HashSet(); 
      requestScope.put(_SCRIPT_RESOURCES_KEY, written); 
     } 

     return written; 
     } 

     static private final String _SCRIPT_RESOURCES_KEY = 
          ShufflerRenderer.class.getName() + ".SCRIPTS_WRITTEN"; 

しかしながらヘッドタグへの書き込みに加え、インポートリンクはまた、私のコンポーネント・コードで書いています。 writeScriptResource()メソッドは、encodeBeginメソッドの先頭で呼び出されます。 誰かが私のページにインラインスクリプトとスタイルを挿入しないようにする方法を知っていますか?事前に

おかげで、 パウロS.

答えて

0

私はあなたがJSF 2を使用できるかどうか知っているが、複合コンポーネントとの時間を使用してリソースが含まやすくなりません:outputStylesheetと時間:outputScript。ページがレンダリングされると、リソースはhtmlの先頭に置かれます。

関連する問題