2014-05-07 139 views
1

我有幾個需要包含常用xsl文件的xsl文件。因此,我不想在每個人中包含javascript文件,而是要創建一個包含java腳本文件的Common.xsl,並且所有xsl文件都將包含它。
問題是如何做到這一點?

我嘗試使用包括一些建議的方法的JavaScript文件,但沒有成功,在瀏覽器控制檯我得到的錯誤:
未捕獲的ReferenceError:jQuery是沒有定義
未捕獲的ReferenceError:$沒有定義

它看起來像jQuery不包括在內。
我試圖做這樣的事情:如何在其他xsl文件中包含常用的xsl文件?

<"script type="text/javascript" src="common.js" />
or

(function() { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = "../jquery/jquery-1.9.1.min.js"; 

    document.getElementsByTagName('head')[0].appendChild(script) 
})(); 


編輯: 我回答我的問題見下面的回答。

我已經創建了一個包含所有我常用的JavaScript文件Common.xsl文件:

回答

1

我使用XSL,而不是JavaScript文件解決了我的問題,通過下面的代碼。

Common.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template name="Common"> 
    <link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/site.css" type="text/css"/> 

    <script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-1.11.1.min.js"/> 
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/common.js"/> 
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/MessagesConstants.js"/> 
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/win_functions.js"/> 
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/resizeFunctions.js"/> 
</xsl:template> 



在需要這些包括添加以下行的每個XSL文件:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:include href="common/Common.xsl"/> <!-- Here I include the Common.xsl --> 
    <xsl:template match="/Reflection"> 
    <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "SiteRef_getCSS?CSSName=Site/xhtml1-transitional.dtd"></xsl:text> 
     <html> 
      <head> 
       <title><xsl:value-of select="Localization/ViewAbout"/></title> 

       <xsl:call-template name="Common"/> <!-- Here I apply the tamplate of the common includes --> 

        <body> 
        . 
        . 
        . 
        </body> 
    </xsl:template> 
</xsl:transform> 



爲了解決中包括URI(看到的xsl:包括)在我的Java應用服務器,我不得不執行的URIResolver決心()函數:

public class XslURIResolver implements URIResolver 
{ 
    private static final String XSL_PATH = System.getProperty("user.dir") + File.separatorChar + INetlayerConstants.c_UI_PATH + INetlayerConstants.c_XSL_PATH; 

@Override 
public Source resolve(String href, String base) throws TransformerException 
{ 
    DOMSource xslDomSource; 
    try 
    { 
     DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); 
     dFactory.setNamespaceAware(true); 

     DocumentBuilder dBuilder = dFactory.newDocumentBuilder(); 

     InputStream in = new FileInputStream(XSL_PATH + href); 
     InputSource xslInputSource = new InputSource(in); 

     Document xslDoc = dBuilder.parse(xslInputSource); 
     xslDomSource = new DOMSource(xslDoc); 
     xslDomSource.setSystemId(XSL_PATH + href); 
     return xslDomSource; 
    } 
    catch (ParserConfigurationException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (SAXException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 

    return null; 
} 
} 



然後在改造之前我設置了URIResolver:

TransformerFactory tFactory = TransformerFactory.newInstance(); 
tFactory.setURIResolver(new XslURIResolver()); 


這就是它,希望它可以幫助別人......

0
<xsl:element name="script"> 
     <xsl:attribute name="src">common.js</xsl:attribute> 
     /* common code */ 
    </xsl:element> 

這應該做的伎倆

+0

但是你可以用它來直接指向了jQuery同樣的方法 – stwissel