2013-01-22 65 views
0

我創建簡單的頁面,郵件:如何包括的Facelets頁面的JavaScript文件到的Facelets頁

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html"> 
<f:view locale="#{languageController.locale}" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 

    <h:head> 
    </h:head> 
    <h:body> 
     <script type="text/javascript"> 
      var message = '#{msg.validation_message}'; 
      var notValidMessage = '#{msg.not_submit_message}'; 
      var notValidCurrentFormMessage = '#{msg.partial_valid}'; 
      var hap = 'happiness'; 
     </script> 
    </h:body> 
</f:view> 
</html> 

而且我有驗證形式的JS文件:

function validateForm(formId, elementIds, lang) { 
    var valid = validateFields(formId, elementIds, lang); 
    if (valid) {   
     return true; 
    } else { 
     alert(message); 
     return false; 
    } 
} 

在Facelets的網頁包括我的Facelets文件爲JS文件:

<h:outputScript library="js" name="errorNames.xhtml"/> 
<h:outputScript library="js" name="validation.js"/> 

但似乎頁面errorNames.xhtml未正確包含。

我該如何解決我的問題?

+0

你是什麼意思,「似乎沒有正確包含頁面errorNames」。你有錯誤嗎? – roel

+0

@roel當我嘗試在源代碼中打開genreted頁面'errorNames.xhtml'時,我得到空頁面 – Ray

+1

@Ray您不能將X/HTML頁面作爲腳本提供;瀏覽器將無法以有意義的方式解釋這一點。考慮使用Facelets模板來嵌入此代碼 - 請參閱[此問題](http://stackoverflow.com/questions/4792862)。 – McDowell

回答

1

這個構造是絕對無效的。 <h:outputScript>必須指向一個物理上有效的JS文件。

最好的辦法是使用<ui:include>將它包含在內。

所以,一個/WEB-INF/includes/script.xhtml(不,不XML序言,沒有DOCTYPE,沒有HTML /頭/身體和F:視圖必須在主模板;下面的代碼是完全不變化):

<ui:composition 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
> 
    <h:outputScript> 
     var message = '#{msg.validation_message}'; 
     var notValidMessage = '#{msg.not_submit_message}'; 
     var notValidCurrentFormMessage = '#{msg.partial_valid}'; 
     var hap = 'happiness'; 
    </h:outputScript> 
</ui:composition> 

(注意,這是容易,只要這些變量中的一個包含JS特殊字符,如singlequote,換行等錯誤,使用如有必要OmniFaces#{of:escapeJS()}逃脫JS)

而且在/some.xhtml

<ui:include src="/WEB-INF/includes/script.xhtml" /> 
<h:outputScript library="js" name="validation.js" /> 

無關的具體問題,您如何使用資源library的方式並不完全正確。仔細閱讀What is the JSF resource library for and how should it be used?