如何将Facelets页面作为javascript文件包含到Facelets页面中

时间:2013-01-22 12:31:25

标签: javascript jsf-2 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

我如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

此构造绝对无效。 <h:outputScript>必须指向物理上有效的JS文件。

您最好的选择是使用<ui:include>将其包含在内。

所以,/WEB-INF/includes/script.xhtml(不,没有XML序言,没有doctype,没有html / head / body和f:view必须进入主模板;下面的代码是完整的原样):

<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中包含特殊字符,例如单引号,换行符等,则很容易出错,必要时使用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?