0

我创建带有消息的简单页面:

<?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未正确包含。

我怎样才能解决我的问题?

4

1 回答 1

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的方式并不完全正确。仔细阅读JSF 资源库是干什么用的,应该如何使用?

于 2013-01-22T14:49:54.060 回答