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

JSF(Primefaces)通过ID对几个元素进行Ajax更新

施弘壮
2023-03-14
问题内容

有关JSF的另一个问题,尤其是Primefaces。
同时通过id的元素的ajax更新具有以下问题。如果页面上的元素一一对应,则该ajax更新执行正常:

<ui:repeat value="#{showProducts.inCart}" var="cart">
 <td><p:spinner min="0" value="#{cart.count}" immediate="true">
 <p:ajax process="@this" update="count,subTotal"/></p:spinner></td>         
 <td><h:outputText value="#{cart.totalPrice}" id="count"/></td>
 <h:outputText value="#{showProducts.subTotal}" id="subTotal"/>      
</ui:repeat>

ID为“ count”的元素排在第一位,ID为“
subtotal”的元素排在第二位。如果页面上的元素并非严格一一对应,则标识为“小计”的第二个元素不会更新:

    <ui:repeat value="#{showProducts.inCart}" var="cart">
      <td><p:spinner min="0" value="#{cart.count}" immediate="true">
<p:ajax process="@this" update="count,subTotal"/></p:spinner></td>         
      <td><h:outputText value="#{cart.totalPrice}" id="count"/></td>
      <td><h:outputText value="#{cart.place}" /></td>
    </ui:repeat>
    <h:outputText value="#{showProducts.subTotal}" id="subTotal"/>

这是正常行为还是我错过了一些参数?


问题答案:

如果待更新的组件是不一样的内部NamingContainer组件(ui:repeath:formh:dataTable等),那么你需要指定“绝对”客户端ID。前缀:(默认的NamingContainer分隔符)从根开始。

<p:ajax process="@this" update="count :subTotal"/>

可以肯定的是,检查subTotal生成的HTML中组件的客户端ID以获取实际值。例如,如果它也位于其中h:form,则它也带有其客户端ID前缀,您需要相应地对其进行修复。

<p:ajax process="@this" update="count :formId:subTotal"/>

最好使用ID的空格分隔,因为<f:ajax>它不支持逗号分隔,否则启动器会感到困惑。



 类似资料:
  • 问题内容: 以下定位技术之间有什么区别? 而且,从 性能角度来看 ,哪种方法是通过id定位元素的最快方法? 问题答案: 您的问题很难回答,肯定会给出一个结论性的答案。实际上,我很想将此问题标记为“太宽泛”,其他答案和评论也支持该问题。 以您的为例。纵观Selenium来源, 大多数 驱动程序只是获取您提供的ID,然后将其传递给有线协议: 如您所知,每个浏览器供应商都在单独的二进制文件中实现自己的有

  • 我在我的UI上使用JSF的Primefaces。我对p:datatable上的ajax有一个特定的要求。这是我的项目的样本页面: 在这里,我有一个数据表,其中列出了创建的所有行。每行都有 id 和值。值是可编辑的。窗体中还有一个面板用于创建新行。后备 Bean 预先填充了所有创建的行,其中包含@PostConstruct。支持Bean有其他方法来编辑,取消和创建。此页面正在运行,下面给出的是新要求

  • 问题内容: 我需要将数据发布到php页面,然后我想获取响应中某个div的文本,但似乎无法正确设置。我对jQuery不太满意,但是我通常可以很快地解决问题……我已经花了一分钟的时间,尝试了所有我发现的东西……我想我只是缺少了正确的东西组合。 这是输出,红色框是我想要的响应… !! [这张照片看起来真的很小……当我拍的时候并不是那么小。我希望它仍然可读] [1] 这样做: 回应是… 我尝试删除样式部分

  • 我有一个datatable,其中包含删除行的按钮,我想在之后刷新该表。刷新工作很好,除了一个案例,当我删除最后一个项目。我相信这是因为属性,它在ajax更新时表现不佳。它都在一个复合组件中,datatable是有条件呈现的,看起来都是这样的: 除了我从列表中移除最后一个项目(并希望表消失)的情况外,这工作得很好。通过ajax显示表不是问题,因为我添加的项目也没有提交,并且表在添加第一个项目后正确显

  • 下面的例子很好用,但是我在基本概念上有点混乱。

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