gpt4 book ai didi

jsf-2 - 从操作方法结果调用页面时未调用 JSF 2 Prerenderview 监听器

转载 作者:行者123 更新时间:2023-12-01 08:14:22 25 4
gpt4 key购买 nike

我正在使用 f:metadata 元素中的预渲染 View 事件从另一个页面调用页面。

如果我使用 <h:link> 导航到页面它工作并调用监听器方法。

但是,如果我使用属于调用页面的托管 bean 的操作方法的结果导航到页面,则不会调用预渲染 View 中指定的监听器(就像通过链接调用一样)。它确实导航到第二页,只是没有监听器调用。

我真的更喜欢从 action 方法调用,因为我用它来做一些工作并在 session 映射中放置一个变量以供被调用页面使用。我不确定如何使用链接实现同样的目标。该对象可能相当大... kb 不是 Mb 但仍然不是我想放入请求中的东西。

我尝试将调用页面请求的托管 bean 设置为范围和 View 范围。

如果从托管 bean 结果调用预渲染 View ,是否不可能触发它?正如我所说,我是通过链接让它工作的。

<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}">

最佳答案

ui:composition 标记修剪它之外的所有内容,因此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>

This example详情。

关于jsf-2 - 从操作方法结果调用页面时未调用 JSF 2 Prerenderview 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com