#jsf #facelets
#jsf #лицевые панели
Вопрос:
У меня есть главная страница, которая выглядит следующим образом:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<p:panel id="panel">
<ui:include src="#{bean.page}">
</ui:include>
</p:panel>
<p:commandButton actionListener="#{bean.changePage}" value="Push" ajax="true" update="panel"/>
</h:form>
</h:body>
</html>
Что я хочу сделать, так это создать подобный компонент и динамически изменять, какая страница включена. Вот как выглядит компонент:
@ManagedBean
@SessionScoped
public class Bean {
private String page = "";
public Bean() {
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public void changePage(ActionEvent e) {
page = "Page.xhtml";
}
}
Когда я нажимаю кнопку, я хочу, чтобы эта страница была включена:
<?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"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<ui:component>
Hello from facelets
</ui:component>
</h:form>
</h:body>
Проблема в том, что мне приходится дважды нажимать кнопку, чтобы включить страницу. Как это можно сделать, чтобы при первом нажатии кнопки включалась страница?
Комментарии:
1. Какой JSF impl / version? Какая версия PF? Не удается воспроизвести вашу проблему в Mojarra 2.1.1 и PF 2.2.1. Обратите внимание, что ваша композиция шаблона включаемой страницы довольно … странная (но она должна работать, я даже протестировал ее сам, чтобы исключить ее из числа причин проблемы).
Ответ №1:
Такого рода шаблонизация обычно достигается с помощью тегов <ui:insert>
и <ui:define>
. Ознакомьтесь с этой страницей руководства по Java EE.
Комментарии:
1. Привет, я столкнулся с аналогичной проблемой, также я не понял, как файл шаблона поможет в этой ситуации. Есть ли какой-либо другой способ, с помощью которого включаемая страница будет отображаться только в один клик?
2. Извините, я не совсем понимаю, о чем вы спрашиваете. Вероятно, лучше задать новый вопрос вместо того, чтобы делать это в комментариях. Вы всегда можете сослаться на этот вопрос для справки.