Hi Look the javadoc of f:metadata:
"... Declare the metadata facet for this view. This must be a child of the <f:view>. This tag must reside within the top level XHTML file for the given viewId, or in a template client, but not in a template. ..." That behavior is declared on the spec, and the reason behind that is the compiler parse xhtml files in a different way when metadata is retrieved. regards, Leonardo Uribe 2012/1/12 Rudy De Busscher <[email protected]>: > Hi All, > > I have an issue with the view parameters in combination with templating. > > in file templates/template.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:metadata> > <f:viewParam name="parameterValue" value="#{helloBean.test}" > id="paramTemplate" /> > </f:metadata> > > <h:head> > .... > > > in file 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"> > > <body> > <ui:composition template="/templates/template.xhtml"> > > <ui:define name="title">ViewParameter issue</ui:define> > > <ui:define name="content"> > Parameter value #{param.parameterValue} <br/> > Backing bean property #{helloBean.test} <br/> > .... > > When I call the page with the URL test.jsf?parameterValue=Rudy, only the > first line is correct, the el #{helloBean.test} returns null. > > Without templating, the correct behaviour is shown. > > I was able to trace it back to the class > org.apache.myfaces.view.facelets.compiler.SAXCompiler.ViewMetadataHandler > which only takes into account the <f:metadata> tags in the file. (called > from the RestoreViewExecutor when the view meta data is generated in case of > a non-postback (viewRoot = metadata.createMetadataView(facesContext); ) > This handler ignores the <ui:composition> and thus missing the definition in > the template. > > You can work around it by specifying the <f:metadata> within a <ui:define> > and put it in the template at the correct place (so that the parent of > <f:metadata> is the ViewRoot) > > I have the use case that I have a lot of pages where a viewParameter should > be present and I don't like to repeat it on every view (in case things > changes) > > Is this issue to specific for my situation or should I create a Jira Issue > for it? > > Regards > Rudy > > -- > Rudy De Busscher > http://www.c4j.be >
