当前位置: 首页 > 知识库问答 >
问题:

从表中更新JSF(Primefaces)

柴寂离
2023-03-14

我有一个datatable,其中包含删除行的按钮,我想在之后刷新该表。刷新工作很好,除了一个案例,当我删除最后一个项目。我相信这是因为render属性,它在ajax更新时表现不佳。它都在一个复合组件中,datatable是有条件呈现的,看起来都是这样的:

<p:dataTable id="#{cc.attrs.id2}_resultTable"
             value="#{cc.attrs.listData}"
             var="f"
             rendered="#{cc.attrs.list and not empty cc.attrs.listData}"
             rowKey="#{f.code}">
    ...columns
    <p:column>
        <p:commandButton action="#{myBB.removeItem}"
                         update="#{cc.attrs.id2}_resultTable">
            <f:setPropertyActionListener value="#{f}" target="#{myBB.selected}"/>
        </p:commandButton>
    </p:column>
</p:dataTable>

除了我从列表中移除最后一个项目(并希望表消失)的情况外,这工作得很好。通过ajax显示表不是问题,因为我添加的项目也没有提交,并且表在添加第一个项目后正确显示。

我试图将表包含在带有ID并正在更新的h:panelgroup ID=“#{cc.attrs.id2}_resultpanel”中,但我得到了以下异常:

Cannot find component with expression "test_resultPanel" 
referenced from "mainForm:j_idt111:test_resultTable:0:j_idt187".

共有1个答案

周洋
2023-03-14

NeplatnyUdaj可能对原因有这个权利,它很可能是rendered属性。我通常用来绕过这一点的解决方案是简单地创建一组包装器对象,然后刷新整个表。

您的模型可能看起来像->

  List<Wrapper> data = ....;
  public class Wrapper implements Serializable
  {
      properties....
     public void onAction(ActionEvent evt) { removeMeFromList(); //..do something }
  }

在视图中,您只需直接引用包装器对象:

      <p:dataTable var="data" id="table"> ...
         <p:column>
           <p:commandButton actionListener="#{data.onAction}" update="table"/> 
           //Ajax updates here via the "Wrapper" object. 
           //Also, when there's complex business logic I find this 
           //easier to read (purely my preference).
         </p:column>
      ....

这并不优雅,但实际上很容易使用(而且,如果您不关心内存中有很多对象,这是一种简单的处理方法)。因为您的操作侦听器在包装器对象上激发,所以您不必担心它何时激发,所有更新都发生在bean中,然后您的表就会用新模型更新。

 类似资料:
  • 主要内容:JSF数据表更新行数据实例JSF中有一个叫作的控件,可用来渲染和格式化表格。使用,我们可以迭代收集或数组数组来显示数据。下面我们来学习如何向更新数据。 要使用,我们需要添加以下HTML头。 以下JSF标签 - 被渲染成以下HTML标签。 JSF数据表更新行数据实例 打开 NetBeans IDE 创建一个Web工程:DataTableUpdate,其目录结构如下所示 - ![JSF数据表更新行数据实例] 创建以下文件代码,

  • 我有两个密切相关的问题: 我需要在ui中的标签中更新一个表单:从主页上的对话框中重复,但不知道如何更新(因为ui中有很多标签:重复,我只需要更新一个) 命名容器被搞砸了,当我在该表单中使用id时(在试图确定更新路径表达式的情况下...) 我需要它的原因:更新“完整列表”(当前情况)会破坏所有

  • 问题内容: 我的GUI中有一个由菜单填充的OptionMenu。每次用户运行某个进程时,列表都会更新以反映这一点。有没有一种方法可以基于列表更新OptionMenu?我已经试过按照这个问题,但无济于事。但是,关闭并重新打开该窗口并不会像您期望的那样刷新OptionMenu。相关代码: 问题答案: OptionMenu中的选项未绑定到创建它们的列表。因此,更改列表不会更改OptionMenu,您必须

  • 问题内容: 整个晚上 其实是晚上。大约晚上11点。我的大脑正在关闭,需要一些帮助,所以我可以完成工作并回家:) 我有两个表-表a和表b。当其他两个字段匹配时,我需要使用表b中的值更新表a中的字段。这些表的每个记录没有唯一的ID :( 基本上,我想这样做: 或者至少…我认为那是我想要做的… 有人可以帮我吗? 问题答案: 您可以通过更新中的联接来执行此操作:

  • 问题内容: 这是代码: 单击命令按钮时,将调用并执行后备bean中的getDualListModelForTags()。在getDualListModelForTags()中,我做了一些修改,所以我希望更新选择列表。但是,选择列表(id = tags)不会再次呈现。仅当我刷新页面时,才会对选择列表进行修改。 问题答案: PrimeFaces 组件无法与一起使用。您需要使用按钮自己的以ajax为目标

  • 问题内容: 我想构建一个表格,该表格可以根据其他组件的状态动态更改可见的组件。 例如,…有一些文本框和一些复选框,并且如果用户激活了某个复选框,则应该出现一堆其他输入元素。 我可以使用JSF 2.0 + Tomahawk来做到这一点吗,还是必须让另一个库来做到这一点?我该怎么办呢?没有AJAX,这将无法工作,对吗? 提前致谢! 问题答案: Ajax是实现此目的的便捷方法,而JSF 2.0捆绑了aj