我创建了包含消息的简单页面:
<?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 :(得分: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?