我对在facelet组件中放置javascript有疑问。这更多的是关于最佳实践/风格,而不是编程问题,但是我觉得我想到的所有解决方案充其量都是黑客。好的,这是我的情况:
我有一个这样的facelet模板(我的脸和apache特立尼达)...
<ui:composition>
<f:view locale="#{myLocale}">
<ui:insert name="messageBundles" /><!--Here we add load bundle tags-->
<tr:document mode="strict" styleClass="coolStyleDoc">
<f:facet name="metaContainer">
<!--This trinidad defined facet is added to HTML head-->
<tr:group> <!-- blah bal my own styles and js common to all -->
<ui:insert name="metaData" />
</tr:group>
</f:facet>
<tr:form usesUpload="#{empty usesUpload ? 'false' : usesUpload}">
<div id="formTemplateHeader">
<ui:insert name="contentHeader" />
</div>
<div id="formTemplateContentContainer">
<div id="formTemplateContent">
<ui:insert name="contentBody" />
</div>
</div>
<div id="formTemplateFooter">
<ui:insert name="contentFooter">
</ui:insert>
</div>
</tr:form>
<!-- etc...--->
现在,要使用此模板的facelet如下所示:
<ui:composition template="/path/to/my/template.jspx">
<ui:define name="bundles">
<custom:loadBundle basename="messagesStuff" var="bundle" />
</ui:define>
<ui:define name="metaData">
<script>
<!-- cool javascript stuff goes here-->
</script>
</ui:define>
<ui:define name="contentHeader">
<!-- MY HEADING!-->
</ui:define>
<ui:define name="contentBody">
<!-- MY Body!-->
</ui:define>
<ui:define name="contentFooter">
<!-- Copyright/footer stuff!-->
</ui:define>
</ui:composition>
所有这些工作都很好,但是我遇到的问题是我想在此页面内使用facelet组件时。如果facelet组件具有自己的javascript代码(jQuery的东西等),如何使之成为javascript代码包含在生成的html的标头部分中?
任何帮助,将不胜感激。请让我知道是否不清楚或有什么...预先感谢
最佳答案
假设使用JSF2 Facelets,您应该可以使用h:head
/ h:outputScript
标记执行某些操作。
<?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">
<h:head>
<title>JSF2</title>
</h:head>
<h:body>
Hello from Facelets
<h:outputScript target="head">
<![CDATA[
document.write("<!-- this will render in the head tag -->");
]]>
</h:outputScript>
</h:body>
</html>