<ui:insert>标签在facelets中不起作用</ui:insert>

时间:2012-07-12 13:34:09

标签: jsf java-ee jsf-2 facelets

嗨大家我有一个非常奇怪的问题。我创建了一个客户端模板facelet和模板facelet。但是当我运行我的网页时,它不会插入定义的标签。我的意思是不工作。这是我的代码
insert.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
   <title>facelet example </title>
</head>
<body> 
  <ui:insert name="face1"> </ui:insert>
  <ui:insert name="face2"> </ui:insert>
  <ui:insert name="face3"> </ui:insert>
  <ui:insert name="face4"> </ui:insert>
</body>
</html>

compose.xhtml:

<!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:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html">
<body>
   <ui:composition template="insert.xhtml">
   <ui:define name="face1">
   <center><h2>Facelet</h2></center>
   <h3>Welcome to the Facelet world..........</h3>
  </ui:define>
  <ui:define name="face2">Enter UserID :<br/>
   <h:inputText id="it" /><br/><br/>
   </ui:define>
   <ui:define name="face3">Enter Password :<br/>
   <h:inputSecret id="is" /><br/><br/>
   </ui:define>
  <ui:define name="face4">
   <h:commandButton id="b" value="Submit" />
  </ui:define>
   </ui:composition>
</body>
</html>

但是当我在insert.xhtml中使用<include src="compose.xhtml">标签时,它会显示完整的facelet.But包含标签仅在我这样写时才有效

<insert name="face1">
<include src="compose.xhtml"/>
</insert>

如果我在include之前删除insert标签然后包括也不工作。我厌倦了这个JSF 2.0 facelets的奇怪行为。请帮帮我 感谢

2 个答案:

答案 0 :(得分:0)

尝试按照本教程,如果您不熟悉JSF 2模板,这将非常有用。 Here is the link

我认为问题出在您尝试使用的模板的路径中:

<ui:composition template="insert.xhtml">

应该是:

<ui:composition template="/insert.xhtml">

如果模板位于根文件夹中。

答案 1 :(得分:0)

首先,您需要了解标签“template”属性是可选的,这意味着您的代码中存在一些错误。如您所知,facelet将仅包含标签之间的部分,因此

xmlns="http://www.w3.org/1999/xhtml" 
   xmlns:ui="http://java.sun.com/jsf/facelets" 
  xmlns:h="http://java.sun.com/jsf/html"

这应该带有不在html标签中的组合。
您的问题类似于this question。我希望这也会对您有所帮助 感谢