<ui:define>
должен быть помещен в <ui:composition>
или <ui:decorate>
с a template
, содержащим соответствующие теги <ui:insert>
. Вы переместили его в <ui:composition>
без a template
. Отсутствие шаблона означает отсутствие содержимого.
Технически, чтобы удовлетворить ваши требования, вы должны заменить <ui:include>
на <ui:insert>
.
<!DOCTYPE html>
<ui:composition
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="template.xhtml">
<ui:define name="head">
<title>Title</title>
</ui:define>
<ui:insert />
</ui:composition>
И объявите вышеуказанную страницу (я предполагаю, что somepage.xhtml
) как template
в admin_generic.xhtml
.
<!DOCTYPE html>
<ui:composition
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="somepage.xhtml">
<ui:define name="header">
<h1>Header</h1>
</ui:define>
<ui:define name="content">
<table><tr><td>table</td></tr></table>
</ui:define>
</ui:composition>
Обратите внимание, что вместо браузера вы должны открыть admin_generic.xhtml
. Если вы намереваетесь открыть somepage.xhtml
в браузере, то <ui:define>
действительно должен оставаться в somepage.xhtml
. Однако вы можете заменить тело <ui:define>
на простое <ui:include>
.
<!DOCTYPE html>
<ui:composition
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="template.xhtml">
<ui:define name="head">
<title>Title</title>
</ui:define>
<ui:define name="header">
<h1>Header</h1>
</ui:define>
<ui:define name="content">
<ui:include src="admin_generic.xhtml" />
</ui:define>
</ui:composition>
Это позволяет <ui:composition>
, поэтому вам не обязательно ставить <table>
в root.
<!DOCTYPE html>
<ui:composition
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<table><tr><td>table</td></tr></table>
</ui:composition>