Параметры запроса устанавливаются в bean-компоненте JSF с помощью @ManagedProperty
.
@ManagedProperty(value="#{param.page}")
private String page;
(это в основном bean.setPage(request.getParameter("page"))
непосредственно после построения бина)
Вы можете использовать EL в Facelets <ui:include>
.
<ui:include src="#{bean.page}.xhtml" />
(если bean.getPage()
возвращает profile
, значение будет равно profile.xhtml
и будет включено соответственно)
Нет необходимости в устаревших сервлетах:)
Обновление : вы установили аннотацию не в том месте. Это должно выглядеть так, как в моем первоначальном ответе:
package beans;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class Selector {
@ManagedProperty(value="#{param.page}")
private String page;
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
}
Обратите внимание, что я пропустил имя @ManagedBean
, поскольку значением по умолчанию уже является имя класса с 1-ым символом в нижнем регистре (которое точно совпадает с указанным вами вручную). Я также добавил аннотацию @RequestScoped
, чтобы указать область действия компонента. Я также указывал имя пакета в нижнем регистре, поскольку в имени пакета не разрешено использовать верхние регистры в соответствии со стандартом Соглашения об именах Java .
Все <managed-bean>
в faces-config.xml
совершенно лишнее с новыми аннотациями JSF 2.0. Вы в основном дублируете это. Убери это.
Обновление 2 : index.xhtml
должно выглядеть следующим образом
<!DOCTYPE html>
<html lang="en"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>Include demo</title>
</h:head>
<h:body>
<h1>This is the index page</h1>
<c:catch>
<ui:include src="#{selector.page}.xhtml" />
</c:catch>
</h:body>
</html>
(<c:catch>
предназначен для подавления FileNotFoundException
, когда такого файла нет)
include.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">
<h2>Include page content</h2>
</ui:composition>
Предполагая, что FacesServlet
прослушивает url-pattern
из *.xhtml
и оба файла находятся в одной папке, откройте ее с помощью index.xhtml?page=include
.