Bil*_*mus 3 facelets jsf-2 managed-bean
我在f:metadata元素中使用prerender视图事件调用另一个页面.
如果我使用<h:link>它导航到页面工作并调用侦听器方法.
但是,如果我使用属于调用页面的托管bean的操作方法的结果导航到页面,则不会调用prerenderview中指定的侦听器(如果通过链接调用它).它会导航到第二页,只是没有监听器调用.
我真的更喜欢从action方法调用,因为我使用它来做一些工作并在会话映射中放置一个变量来使用.我不确定如何使用链接实现相同的功能.对象可能相当大...... kb不是Mb,但仍然不是我想要放在请求中的东西.
我已经尝试使调用页面请求的托管bean作用域并查看作用域.
如果从托管bean结果调用它,是不是可以获取prerenderview?正如我所说,我从一个链接开始工作.
<body>
<ui:define name="metadata">
<f:view>
<f:metadata>
<f:event type="preRenderView" listener="#{businessBean.init}" />
</f:metadata>
</f:view>
</ui:define>
<ui:composition template="#{navigationprops.soulard_2col_uprefs_template}">
Run Code Online (Sandbox Code Playgroud)
ui:组合标签修剪它之外的所有内容,因此facelets编译器没有机会读取代码.相反,您应该使用ui:decorate,但请记住f:metadata标签仅适用于顶级页面,而不适用于模板客户端.例如:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:metadata>
<f:viewParam name="hotid"
value="#{hotelBooking.hotelId}"
converter="javax.faces.Long"/>
<f:event type="preRenderView" listener="#{hotelBooking.selectHotel}"/>
</f:metadata>
<ui:decorate template="template.xhtml">
<ui:define name="content">
<!-- ... -->
</ui:define>
</ui:decorate>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
请参阅此示例以获取详细信