Рассмотрим этот шаблон:includeViewParams = истина не работает в шаблонах страниц
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view contentType="text/html">
<ui:insert name="metadata"/>
<h:head>
<title></title>
</h:head>
<h:body>
<ui:insert name="content"/>
</h:body>
</f:view>
</html>
эту страницу, которая использует его (/pages/test.xhtml):
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view contentType="text/html">
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/WEB-INF/templates/testLayout.xhtml">
<ui:define name="metadata">
<f:metadata>
<f:viewParam name="foobar" value="#{pageBean.foo}"/>
</f:metadata>
</ui:define>
<ui:define name="content">
<h:form>
<h:commandLink value="Click"
action="#{util.currentPageAction()}"/>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</f:view>
</html>
боб данной страницы:
@Named
@RequestScoped
public class PageBean implements Serializable
{
public String getFoo()
{
return foo;
}
public void setFoo(String foo)
{
this.foo = foo;
}
private String foo;
}
и этот компонент:
@Named
@ApplicationScoped
public class Util implements Serializable
{
public String currentPageAction()
{
return FacesContext.getCurrentInstance().getViewRoot().getViewId() +
"?faces-redirect=true&includeViewParams=true";
}
}
Когда я загружаю http://localhost:8080/faces/pages/test.xhtml?foo=bar
в браузер и нажимаю <h:commandLink/>
, URL-адрес изменяется на http://localhost:8080/faces/pages/test.xhtml
. То есть параметры представления не включены в URL-адрес переадресации.
Однако, когда я реорганизую страницу так, чтобы она не использовала шаблон, она ведет себя так, как ожидалось. То есть параметры представления включены в URL-адрес переадресации.
Я понимаю, что <f:metadata/>
не работает и не должен работать, если он находится внутри шаблона флатцов. Это не то, что здесь происходит, так что это другая проблема. В спецификации нет ничего, чтобы сказать, что это невозможно. Действительно, не было бы другого способа (насколько мне известно) создания страницы на основе шаблона с параметрами представления.
Добавлен комментарий к [эта ошибка] (http://java.net/jira/browse/JAVASERVERFACES-2260). –
Я надеюсь, что это будет исправлено однажды. Я проголосовал за это. –
У меня есть аналогичная проблема с ' ' или ' ', где в том числе атрибут 'includeViewParams =" true "' не дает такого же поведения, как повторение параметров представления с использованием записей ' '. При использовании 'includeViewParams' значения параметров в запросе link/GET исходят из бэк-компонента страницы' result', а не из параметров представления, представленных на текущую страницу, как я полагаю, они должны быть. [Core JavaServer Faces - третье издание] (http://horstmann.com/corejsf/) p. 91 подразумевает, что эти два метода должны быть взаимозаменяемыми. –