Вам необходимо разделить понятия Facelets (технология представления / создания шаблонов) и JSF (основанная на компонентах инфраструктура MVC). То, что вы хотите, невозможно с одними только Facelets, так как теги Facelets ui
предназначены только для сервера и ничего не излучают на стороне клиента. Вам необходимо добавить компонент JSF (который генерирует в конце HTML), который может быть расположен JS / Ajax на стороне клиента.
template.xhtml
<h:panelGroup layout="block" id="content">
<ui:insert name="content_homepage">Box Content Here</ui:insert>
</h:panelGroup>
(layout="block"
делает его <div>
вместо <span>
)
Кнопка index.html
:
<h:commandButton value="Login" action="#{login.checkLogin}">
<f:ajax execute="@form" render=":content" />
</h:commandButton>
(:content
относится к <h:panelGroup id="content">
, который расположен на верхнем уровне :
)
Определение шаблона содержимого index.html
:
<ui:define name="content_homepage">
<h:panelGroup rendered="#{!login.loggedIn}">
User is not logged in.
</h:panelGroup>
<h:panelGroup rendered="#{login.loggedIn}">
User is logged in.
</h:panelGroup>
</ui:define>
Управляемый компонент:
private String name; // Do NOT initialize with empty string! Poor practice.
// ...
public boolean isLoggedIn() { // Boolean getter methods should be prefixed with `is`.
return name != null; // Do NOT add if/else verbosity for something which already returns boolean! Poor practice.
}
Кроме того, не используйте интервалы в качестве меток. Это плохая семантика HTML. Используйте <h:outputLabel>
(или обычный HTML <label>
).