当前位置: 首页 > 面试题库 >

如何ajax更新PrimeFaces数据表的页脚中的项目?

苍意智
2023-03-14
问题内容

这是我的桌子的外观:

+ --------- + ------------ + ------------------- +
| 标头1 | 标头2 | 标头3 |
+ --------- + ------------ + ------------------- +
| A行| 输入A | 计算输出A |
| B行| 输入B | 计算输出B |
| 等。等。等。
+ --------- + ------------ + ------------------- +
| 总计:计算出的总输出|
+ ------------------------------------------ +

以及简化的代码:

<p:dataTable id="myTable" value="#{myBean.someList}"
    var="currentItem">

    <p:column headerText="Header1">
        <h:outputText value="#{currentItem.name}" />
    </p:column>

    <p:column headerText="Header2">
        <pe:inputNumber value="#{currentItem.inputVal}">
            <p:ajax event="change" listener="#{myBean.changeListener}"
                update="outputVal outputTotal" />
        </pe:inputNumber>
    </p:column>

    <p:column headerText="Header3">
        <h:outputText id="outputVal" value="#{currentItem.outputVal}" />
    </p:column>

    <f:facet name="footer">
        Total:
        <h:outputText id="outputTotal" value="#{myBean.total}" />
    </f:facet>

</p:dataTable>

myBean.someListArrayList<SomeOtherBean>一个字符串和两个整数,只有getter和setter。在myBean.changeListener计算第二整数从第一给定的行,也总让所有行。

因此,当我输入其中一个输入然后进行聚焦时,将调用侦听器并完成计算,但是在屏幕上,第三列中的值发生了变化,但总数固执地保持为零。我相当确定这与PrimeFaces关联,该行将行索引附加到每个输入和输出的生成ID中,但是我不知道如何在页脚中找到输出(生成的ID为mainForm:myTable:0:outputTotal)。

现在,我可以更新父表。但是,只要接收焦点的输入是更新目标的一部分,焦点就会丢失,而且我在极其严格的可访问性规则下,该表 必须
是键盘友好的(键入数字,制表符,键入数字,制表符等。) )

我努力了:

  • update =“:outputTotal”(产生异常,无法找到具有标识符的组件…)
  • update =“ myTable:0:outputTota(相同的例外)
  • update =“ myTable:outputTotal”(不更新,总计保持零)
  • 将文本包装在panelGroup中并更新(不更新)

(带有MyFaces未知版本的PrimeFaces 3.5.0)


问题答案:

您实际上无法从表中更新表的值。但是,您可以使用它p:remoteCommand来实现。另外,我可能会使用对整个表cellEdit事件(而不是单个p:ajax你的pe:inputNumber)。总体结果将是:

<p:remoteCommand name="refreshFooter" update=":formName:outputTotal"/>
...
<p:dataTable id="myTable" value="#{myBean.someList}" var="currentItem">

    <p:column headerText="Header1">
        <h:outputText value="#{currentItem.name}" />
    </p:column>

    <p:column headerText="Header2">
        <pe:inputNumber value="#{currentItem.inputVal}">
            <p:ajax event="change" listener="#{myBean.changeListener}" process="@this"
                oncomplete="refreshFooter();" update="outputVal"/>
        </pe:inputNumber>
    </p:column>

    <p:column headerText="Header3">
        <h:outputText id="outputVal" value="#{currentItem.outputVal}" />
    </p:column>

    <f:facet name="footer">
        Total:
        <h:outputText id="outputTotal" value="#{myBean.total}" />
    </f:facet>

</p:dataTable>

请注意,您 可能需要
添加partialSubmit="true"到中p:ajax,这样仅提交组件的数据。如果您喜欢cellEdit事件的想法,则需要使dataTable可编辑,并在中添加以下内容p:dataTable,并摆脱掉p:ajax内部pe:inputNumber

<p:ajax event="cellEdit" partialSubmit="true" listener="#{myBean.onCellEdit}" 
    process="@this" oncomplete="refreshFooter();"/>

祝好运!



 类似资料:
  • 在我的应用程序中,我有一个PF布局,在西部有一个树节点,在中部有一个内容部分,我想在其中使用ajax技术动态加载不同的页面 为了获得它,这个内容部分包含一个ui:include

  • 问题内容: 我想Ajax使用Primefaces更新JavaScript脚本。 我如何在showMarker中将该值更新为ajax? 问题答案: 将其放在JSF标记中并提供ID。 并有一个按钮或链接是否执行某些操作,并对此进行更新

  • 我有下一个代码: 我还有一些按钮,可以从表中删除元素并对其进行更新。但是我如何更新这个表呢?哪些参数应该在更新中?我尝试了更新=“:tableForm”和更新=“:tableTabView:tableForm”和更新=“:tableTabView”,但没有得到结果。我哪里错了?

  • 我的xhtml中有下一个结构 方法searchAnimals()可以,它返回动物项,但dataTable不刷新,但在java代码(managedBean)中,ArrayList包含这些项。我能做什么?谢谢编辑:我正确地使用了de h:和p:后缀(我想是的),代码是完整代码的一部分,但它是无法正确工作的片段。在第一个面板中,我有一个过滤器控件(按类别、按日期等),命令按钮的功能是调用一个在数据库上执

  • 问题内容: 我已经使用facelets模板完成了一个基本的JSF应用程序。我的模板如下: 然后,我有一个 主页 (如下所示),它导航到 第二页 。两个页面都使用上面的模板。 如果我在faces-config.xml中使用它,它将进行导航,但是将重新加载 整个 页面。我的问题是: 有没有一种方法可以从页面导航到另一个仅更新模板部分的内容?(同时保留页面的其余部分不变) 谢谢! 问题答案: 您可以通过

  • 问题内容: 我想使用Primefaces 5.2创建一个移动表单,其中一个结果通过Ajax 更新第二个,就像这里的展示示例一样:http : //www.primefaces.org/showcase/ui/ajax/dropdown.xhtml,然后是移动版本。 我创建了一个JSF页面和backingbean 正是 像展示例子,它的工作原理。 但是,当我使用第二个元素添加移动外观时,更新后将其呈