2012-04-27 45 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>