gpt4 book ai didi

jsf-2 - 如何检索 ui :param in the backing bean 的值

转载 作者:行者123 更新时间:2023-12-04 17:23:50 24 4
gpt4 key购买 nike

我正在传递一个参数 p1到另一页 page.xhtml :

<ui:include src="page.xhtml">
<ui:param name="p1" value="#{someObject}"/>
</ui:include>

这是否可以评估 #{p1}page.xhtml 的支持 bean 的 @PostConstruct 方法中?使用以下代码, #{p1}无法解决:
FacesContext currentInstance = FacesContext.getCurrentInstance();
currentInstance.getApplication().evaluateExpressionGet(currentInstance, "#{p1}", String.class);

为什么我需要这个?

我使用 xhtml 文件(比如 component.xhtml)作为自定义 UI 组件。这个文件有一个支持 bean,我应该从中获取组件数据。由于我在我的主 JSF 页面中两次或更多次地包含这个 xhtml 文件,我想将不同的对象传递给每个 component.xhtml,以便我的组件每次都使用我的自定义数据。

最佳答案

在 Mojarra 中,您可以将其作为 FaceletContext 的属性获取。 .您可以在 @PostConstruct 中获取它保证在包含的页面中第一次被引用/构造的托管 bean(因此在组件树中声明 <ui:param> 之前不在父页面中)。

FaceletContext faceletContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
Object p1 = faceletContext.getAttribute("p1");

在MyFaces中,整个 FaceletContext在托管 bean 中不可用,因为它在 View 构建时间结束时被丢弃,然后此构造将不起作用。要独立于 JSF 实现,您可能需要考虑通过 <c:set scope="request"> 设置它反而。然后它可以作为请求属性使用。

至于具体的功能需求,可以考虑创建一个带有后台组件的复合组件。有关一些示例,请参阅 our composite component wiki page而这个博客是关于 using multiple input components in a composite component .另见 When to use <ui:include>, tag files, composite components and/or custom components?

关于jsf-2 - 如何检索 ui :param in the backing bean 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14459854/

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