每次使用时在复合组件中获取相同的“componentType”实例

2023-12-23

您好,有一个奇怪的问题,我正在使用Composite Component这是我写的,我从之前使用 CC 的支持 bean 中获取了值(componentType bean)

除了展示代码之外,我不知道如何更好地描述这一点。 我会尽量简短地介绍一下并删除多余的部分: 这是Composite Component定义:

<cc:interface componentType="dynamicFieldGroupList">
   <cc:attribute name="coupletClass" />
   <cc:attribute name="form" default="@form"/>
   <cc:attribute name="list" type="java.util.List" required="true"/>
   <cc:attribute name="fieldNames" type="java.util.List" required="true" />
</cc:interface>

<cc:implementation>
    <h:dataTable value="#{cc.model}" var="currLine">
        <h:column>
            <h:outputText id="inner_control_component" value="Inner Look at currLine:#{currLine}"/>
        </h:column>
    </h:dataTable>
</cc:implementation>

CC bean 定义:

@FacesComponent(value = "dynamicFieldGroupList")
// To be specified in componentType attribute.
@SuppressWarnings({ "rawtypes", "unchecked" })
// We don't care about the actual model item type anyway.
public class DynamicFieldGroupList extends UIComponentBase implements
        NamingContainer
{

    private transient DataModel model;

    @Override
    public String getFamily()
    {
        return "javax.faces.NamingContainer"; // Important! Required for
                                                // composite components.
    }

    public DataModel getModel()
    {
        if (model == null)
        {
            model = new ListDataModel(getList());
        }

        return model;
    }

    private List<Map<String, String>> getList()
    { // Don't make this method public! Ends otherwise in an infinite loop
        // calling itself everytime.
        return (List) getAttributes().get("list");
    }

}

以及使用代码:

<ui:repeat var="group" value="#{currentContact.detailGroups}">
    <h:panelGroup rendered="#{not empty group.values}">
        <h:outputText id="controlMsg" value=" list:#{group.values}" /><br/><br/>
        <utils:fieldTypeGroupList list="#{group.values}"
            fieldNames="#{group.fields}" coupletClass="utils" />
    </h:panelGroup>
</ui:repeat>

id 的文本controlMsg显示正确的值#{group.values}而id的组件内部的控制输出inner_control_component显示上次使用的值。

这些值第一次是正确的...

我猜这是使用 CC bean 时的一个根本错误,否则可能是一个错误MyFaces 2.1(我正在使用的)


这种行为的解释很简单:视图中只定义了一个组件。因此,一种模型也只有一个支持组件。由于模型是在第一次获取时延迟加载的,因此在父迭代组件的每次迭代中都会重用相同的模型。

The <ui:repeat>不在视图构建期间运行(如 JSTL 那样),而是在视图渲染期间运行。因此,视图中的组件实际上没有那么多迭代的项目<ui:repeat>。如果您正在使用<c:forEach>(或在视图构建期间运行的任何其他迭代标记),那么复合组件将按照您的预期运行。

您希望更改数据模型在支持组件中的保存方式。您希望为父迭代组件的每次迭代保留一个单独的数据模型。方法之一是更换model属性如下:

private Map<String, DataModel> models = new HashMap<String, DataModel>();

public DataModel getModel() {
    DataModel model = models.get(getClientId());
    if (model == null) {
        model = models.put(getClientId(), new ListDataModel(getList()));
    }
    return model;
}

也可以看看:

  • 视图构建时间是多少? https://stackoverflow.com/questions/31890433/whats-the-view-build-time
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每次使用时在复合组件中获取相同的“componentType”实例 的相关文章

随机推荐

  • 如何居中和左对齐图像?

    我正在创建一个图像库 希望图像的容器完全居中在页面上 但图像保持对齐 这是我想要的输出 但是 当我尝试做一个text align center在容器上 id gallery 我得到的图像显示如下 我尝试效仿之前的堆栈溢出问题 CSS 居中块
  • 从 Gradle 开始 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我不知道像 Ant Maven 或
  • open()、_open() 和 fopen() 在 MSVC 编译器方面的区别?

    我发现这三个函数都与打开文件有关 open https msdn microsoft com en us library ms235491 v vs 120 aspx 此 POSIX 函数已弃用 使用符合 ISO C 标准的 open 反而
  • symfony2 和doctrine2 较短的实体名称

    谁应该摆脱在 DQL 查询中使用命名空间 我想为我的包中的所有学说请求分配默认名称空间 在查询生成器中使用默认命名空间也是完美的 我想拥有 dql select i from MyCompanyMySuperPuperBundle Issu
  • 有没有办法检查Java中的流是否是有限的? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我知道有infiniteJava 中的流 有没有办法检查流是否是有限的 像这样的方法isStreamFinite Stream
  • 如何在 Windows 7 中更改 git shell 的起始目录

    我下载并安装了 GitHub 提供的程序 包括 Git Shell 问题是我想将 Git Shell 程序的主目录设置为自定义目录 但我不知道该怎么做 我尝试从 Git Shell 快捷方式的属性菜单中更改 开始于 字段 但没有成功 任何人
  • 使列表尽可能不排序的函数

    我正在寻找一个函数来使列表尽可能不排序 最好用Python 背景故事 我想检查 URL 状态并查看 URL 是否给出 404 我只是用asyncio and requests模块 没有什么花哨 现在我不想让服务器超载 所以我想尽量减少同时检
  • 我可以在 OpenGL 中使用不同的多 GPU 吗?

    我读到OpenGL 多 GPU 支持 https stackoverflow com questions 43811699 opengl multi gpu support 我目前使用的是支持 OpenGL 4 5 的 NVIDIA 卡 我
  • 如何在 PHPSESSID cookie 中设置 PATH?

    我的服务器上运行着许多项目 所有这些项目都使用 PHP 会话进行身份验证 现在 由于 PHPSESSID cookie 将 cookie 路径设置为 set cookie 标头中的 因此该 cookie 在整个域中可用 而我需要它仅对当前应
  • C++ 字符串代码点和代码单元有什么好的解决方案吗?

    在 Java 中 字符串有以下方法 length charAt codePointCount codePointAt C 11有std string a u8 很烫烫的一锅汤 but a size 是char数组的长度 无法索引unicod
  • 云外 Windows Azure 表的替代方案

    我正在开发一个 NET 应用程序 它需要在 Azure 和常规 Windows Servers 2003 上运行 它需要存储几GB的数据 而SQL Azure对我来说太贵了 所以我将在云版本中使用Azure表 您能否推荐一种存储解决方案 该
  • TCPDF - 页码不完全右对齐

    我正在使用 TCPDF 生成 pdf 我的问题是 Footer 方法中的以下行 this gt Cell 0 10 Page this gt getAliasNumPage this gt getAliasNbPages T false R
  • 如何使用谷歌的“你是说吗?”来实现Python拼写检查器

    我正在寻找一种在 python 中创建一个函数的方法 在该函数中传递一个字符串 然后它返回它是否拼写正确 我不想查字典 相反 我希望它检查 Google 的拼写建议 这样 名人名字和其他各种专有名词将被视为拼写正确 到目前为止 这就是我所处
  • unique_ptr 的 static_pointer_cast 的替代方案

    我明白使用static pointer cast with unique ptr将导致所包含数据的共享所有权 换句话说 我想做的是 unique ptr foo fooFactory do something for a while uni
  • 如何在android上加载本地库?

    我有一个 so 库 是我从另一个 APK 中提取的 我已将其复制到项目中的 libs armeabi 位置 在我的课堂上 我正在加载它 static System loadLibrary mylib 该应用程序崩溃了 08 03 07 52
  • Android 中同一应用程序的多个实例

    如何在从图库应用程序内部共享图像时使用已运行的应用程序 它总是创建已经运行的应用程序的单独实例 我在 Whatsapp 应用程序中观察到同样的问题 是的 另一个用例是当您单击通知时 如果应用程序已经在后台 它将启动一个新实例 using a
  • CUDA 运行时 API 错误 38:未检测到支持 CUDA 的设备

    情况 我有一个 2 gpu 服务器 Ubuntu 12 04 我将 Tesla C1060 与 GTX 670 交换 然后我在 4 2 上安装了 CUDA 5 0 之后我编译了除 simpleMPI 之外的所有示例 没有错误 但当我跑步时
  • Java 8 mapToInt (mapToInt(e -> e)) 到底是如何提高性能的?

    我正在读 Java 8 Lambdas 一书 在某个时候 作者说 尽可能使用原始专用函数是个好主意 因为 性能优势 他在这里指的是mapToInt mapToLong等 问题是说实话我不知道性能从何而来 让我们考虑一个例子 Consider
  • 如何将 TTF 文件转换为 OTF 格式?

    我需要使用 font face功能和我的字体都是TrueType TTF 格式 那么如何将TTF转换为OpenType OTF 格式 如果您使用的是 Linux 则可以使用 FontForge 它可以通过 Python 编写脚本 usr b
  • 每次使用时在复合组件中获取相同的“componentType”实例

    您好 有一个奇怪的问题 我正在使用Composite Component这是我写的 我从之前使用 CC 的支持 bean 中获取了值 componentType bean 除了展示代码之外 我不知道如何更好地描述这一点 我会尽量简短地介绍一