gpt4 book ai didi

jsf-2 - 如何将不同类型的托管 Bean 传递给组合以供重用?

转载 作者:行者123 更新时间:2023-12-04 04:44:45 25 4
gpt4 key购买 nike

我正在创建一个内联文本编辑器。我已经编写了代码来编辑一个 h:ouputText字段 (h:inputHidden)。作品。因此,我认为我创建了一个复合(小部件),我可以调用我想要更新的每个字段。当然,在我的例子中,这些字段指的是托管 bean,即 PubController MB。

<composite:interface name="inlineEditor">
<composite:attribute name="attrOfMb" required="true"
type="java.lang.String" />
<composite:attribute name="pubController" required="true" type="com.playground.webapp.controller.PubController"/>
</composite:interface>

现在,我有以下任务要完成:
  • 将 MB 传递给组合(完成)。
  • 在组合中,创建 div 和具有 MB 属性 id 的隐藏输入字段。

  • 挑战我挣扎的地方:
  • 如何将传递的 PubController 的属性“绑定(bind)”到隐藏的输入字段? #{cc.attrs.pubController.title}?好吧,它不应该总是相同的属性。该属性应该由接口(interface)属性attrOfMb中传递的内容来选择。 .
  • 在其他情况下,它不需要 PubController。可能是另一个MB。我最初的想法是将接口(interface)类型定义为 javax.faces.bean.ManagedBean .另一方面,您如何将传递的 MB“绑定(bind)”到输入隐藏字段(反之亦然)。

  • 是否有关于如何完成这些事情的 JSF 模式?

    最佳答案

    在设计复合 Material 方面,您走错了路。您应该绑定(bind)一个 bean 属性,而不是整个 bean。
    IE。你不应该

    <my:composite bean="#{bean}" />
    但你应该有
    <my:composite value="#{bean.value}" title="#{bean.title}" />
    一旦你解决了这个问题,你就可以轻松地在任何支持 bean 上重用它。请注意,这也是标准 JSF <h:xxx> 的方式。组件工作。如果您出于某种不清楚的原因担心“太多”属性,那么只需创建一个可重用的模型类,它又可以成为支持 bean 的属性。
    <my:composite data="#{bean.data}" />
    这样你就可以在合成中进一步使用它作为 #{cc.attrs.data.value} , #{cc.attrs.data.title} , ETC。
    如果您真的非常需要绑定(bind)整个 bean,那么我会质疑标记文件或包含文件是否不是您想到的任何功能要求的更好解决方案。复合组件应该真正代表具有单一职责和单点模型值绑定(bind)的组件。
    也可以看看:
  • When to use <ui:include>, tag files, composite components and/or custom components?
  • 关于jsf-2 - 如何将不同类型的托管 Bean 传递给组合以供重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372396/

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