2012-04-27 54 views
0

我有一個JSF 2.0 Web應用程序,我想包括TinyMCE 3.5。JSF 2.0 TinyMCE referenced.js文件未找到

的方式我把它是象下面這樣:

<composite:implementation> 
    <h:outputScript name="tiny_mce/tiny_mce.js"/> 
    <h:outputScript name="js/tinymce_init.js"/> 
    <h:inputTextarea rows="5" cols="80" styleClass="tinymce" value="#{cc.attrs.value}"/> 
</composite:implementation> 

現在一切工作正常。我唯一的問題是「tiny_mce.js」對tiny_mce文件夾中的其他js文件有一些引用。這些引用返回404錯誤,因爲它們沒有.xhtml結尾。

示例:tiny_mce.js引用en.js.它試圖從「http://localhost:8080/briefe/javax.faces.resource/js/tiny_mce/langs/en.js」加載它。如果我在瀏覽器中輸入這個URL,我會得到一個404。如果我在最後添加了.xhtml(「http://localhost:8080/briefe/javax.faces.resource/js/tiny_mce/langs/en.js.xhtml」),那麼一切都很好。

所以我想問你,如果有一種方法,我可以將xhtml添加爲.js文件的默認結尾,或者如果有方法可以使.js文件可訪問。

+0

* .js.xhtml將是非常可怕的同樣的方式...檢查你的web.xml或faces-config.xml,如果* .xhtml結尾有任何限制......否則,爲什麼不把所有的tinymce文件放在一個文件夾中? – Tobi 2012-04-27 06:40:18

+0

感謝您的建議,Tobi.I同意你的意見。 js.xhtml是沒有選擇的。 web.xml和faces-config.xml似乎沒問題。在一個文件夾中的所有.js文件不會解決問題,因爲其中一些.js文件引用了其他文件(因此結構需要保留)。 – mooonli 2012-04-27 06:45:24

+0

好吧...這可能對你有幫助嗎? http://stackoverflow.com/questions/3008395/jsf-facelets-sometimes-i-see-the-url-is-jsf-and-sometimes-xhtml-why – Tobi 2012-04-27 06:49:25

回答

3

<h:outputScript>將產生由ResourceHandler處理的JSF資源URL這又允許模塊化和版本化,而不需要改變<h:outputScript name>。當FacesServlet*.xhtml映射,資源URL看起來像這樣

/contextname/javax.faces.resource/filename.js.xhtml

TinyMCE的腳本顯然是自動包括一些其他腳本基於腳本自己的URL,並且不考慮.xhtml後綴。

/contextname/javax.faces.resource/otherfile.js

然後,這確實會導致404。當您使用FacesServlet(如/faces/*)的前綴映射時,則不會發生此問題。

一個解決方案是自己硬編碼<script>所需的URL。那麼正確的替代將是

<script type="text/javascript" src="#{request.contextPath}/resources/tiny_mce/tiny_mce.js"/> 
<script type="text/javascript" src="#{request.contextPath}/resources/js/tinymce_init.js"/> 

唯一的缺點是,當你在一個視圖中使用多個複合材料部件,那麼你最終會與多個條目<script>在體內,而不是隻有一個隨取照顧<h:outputScript>。這可能最終導致JavaScript衝突/錯誤。如果遇到這個問題,我會考慮修改TinyMCE JavaScript文件,以便將.xhtml後綴添加到URL中,以便繼續使用<h:outputScript>。或者,您當然可以使用現有的即時可用的JSF富文本編輯器組件,例如PrimeFaces' <p:editor>,這樣您就不必擔心這一切。

0

您還可以測試,而不是<h:outputScript...>

這本:

<composite:implementation> 
    <script language="text/javascript" src="tiny_mce/tiny_mce.js" /> 
    <script language="text/javascript" src="js/tinymce_init.js" /> 
    <h:inputTextarea rows="5" cols="80" styleClass="tinymce" value="#{cc.attrs.value}"/> 
</composite:implementation> 

或者是這樣的:

<script language="text/javascript" src="tiny_mce/tiny_mce.js" /> 
<script language="text/javascript" src="js/tinymce_init.js" /> 

<composite:implementation> 
    <h:inputTextarea rows="5" cols="80" styleClass="tinymce" value="#{cc.attrs.value}"/> 
</composite:implementation> 
0

我剛剛碰到這個問題,最簡單的辦法是添加缺少的文件,你增加了tiny_mce.js

 <!-- TinyMCE --> 
     <h:outputScript library="libs" name="js/tinymce/4.1.10/tinymce.min.js"></h:outputScript> 
     <!-- TinyMCE theme --> 
     <h:outputScript library="libs" name="js/tinymce/4.1.10/themes/modern/theme.min.js"></h:outputScript> 
     <!-- TinyMCE plugins --> 
     <h:outputScript library="libs" name="js/tinymce/4.1.10/plugins/advlist/plugin.min.js"></h:outputScript> 
     <h:outputScript library="libs" name="js/tinymce/4.1.10/plugins/autolink/plugin.min.js"></h:outputScript> 
     <h:outputScript library="libs" name="js/tinymce/4.1.10/plugins/lists/plugin.min.js"></h:outputScript> 
     <h:outputScript library="libs" name="js/tinymce/4.1.10/plugins/charmap/plugin.min.js"></h:outputScript>