Primefaces选项卡ajax部分更新错误

     2023-02-23     187

关键词:

【中文标题】Primefaces选项卡ajax部分更新错误【英文标题】:Primefaces tab ajax partial update bug 【发布时间】:2013-03-12 04:39:21 【问题描述】:

我相信在尝试使用 ajax 对其进行部分更新时,primefaces 中存在错误。我在 primefaces 论坛上发布了相同的查询,但没有任何人回复。

我附上了一个示例,其中我有一个带有两个选项卡的 tabView。当我单击“加载新选项卡内容”按钮时,它会调用我的支持 bean 来动态更改 tab1 的内容。它应该清除 tab1 的现有内容并加载新内容,在这种情况下它只是一个 inputText。然后我使用 RequestContext.getCurrentInstance().update(updateIds) 方法来指示我希望 tab1 自行刷新。问题是标签标题没有改变,新的 inputText 内容放在 tab1 和 tab2 中,但我从未指定对 tab2 做任何事情,所以不明白为什么还有一个新的 inputText。您可以使用此代码并尝试自己查看是否得到相同的结果,或者如果我做错了什么,请纠正我。

Primefaces 3.5 Mojarra JSF API (javax.faces/2.1) 2.1.15 (20121116-1711) Mojarra JSF 实现 (javax.faces/2.1) 2.1.15 (20121116-1711) Tomcat 7.0.32 JDK 1.6.0_07

**

dynamicTabLoading.xhtml

**

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:p="http://primefaces.org/ui"   >

    <h:head>
      <title>Prime Prototype Dynamic Tabs</title>
   </h:head>

   <h:body>

      <h:form id="myForm">
         <p:panel>
            <h:outputText value="Dynamic Tab Loading..."></h:outputText>
            <p:commandButton id="loadTabContentBtn" value="Load New Tab Content"
                  actionListener="#tabManager.loadNewTabContent"  />


            <p:tabView id="tabView1" binding="#tabManager.tabViewComponent" dynamic="true" >

               <p:tab id="tab1" title="Tab 1" closable="true" >   
                  <h:outputText value="blank 1" />
               </p:tab>

               <p:tab id="tab2" title="Tab 2" closable="true" >   
                  <h:outputText value="blank 2" />
               </p:tab>      

            </p:tabView>   

         </p:panel>
      </h:form>

      <!-- TODO remove for production -->
      <ui:debug />

   </h:body>

</html>

**

TabManager.java

**

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.component.UIComponent;

import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.tabview.Tab;
import org.primefaces.component.tabview.TabView;
import org.primefaces.context.RequestContext;

@ManagedBean
public class TabManager 

   private TabView tabViewComponent;

   public void loadNewTabContent() 

      /* get list of tabs from tabView*/
      List<UIComponent> tabs = getTabViewComponent().getChildren();

      /* get the first tab which had id="tab1" */
      Tab targetTab = (Tab)tabs.get(0);
      System.out.println("Target Tab Id is " + targetTab.getClientId());

      /* clear the tabs current content */
      targetTab.getChildren().clear();

      /* set new tab title and new content */
      targetTab.setTitle("Tab 1 Changed");            
      InputText inputTxt = new InputText();
      inputTxt.setValue("This is new content for Tab 1 ");
      targetTab.getChildren().add(inputTxt);

      List<String> updateIds = new ArrayList<String>();
      updateIds.add(targetTab.getClientId());

      RequestContext.getCurrentInstance().update(updateIds);
   

   public TabView getTabViewComponent() 
      return tabViewComponent;
   

   public void setTabViewComponent(TabView tabViewComponent) 
      this.tabViewComponent = tabViewComponent;
   


谢谢

【问题讨论】:

几年前我从 IceFaces (JSF 1.2) 迁移到 Primefaces。那时我非常依赖绑定来更新组件,甚至生成页面内容,这很糟糕。自从搬到 Primefaces 之后,我甚至一次都不需要使用绑定。而且我经常使用标签。也许与其给出一段抽象的(但可重现的)代码,不如告诉我们你到底想要做什么。也许有更好的方法来实现这一点。 【参考方案1】:

当 tabview 被加载时,它会将内容放入缓存中。因此,当您要重新加载内容时,它不会刷新内容。尝试在 tabview 属性中使用 dynamic="true" 和 cache="false" 来解决相同的问题。

【讨论】:

Primefaces tabview 设置默认静态选项卡

】Primefacestabview设置默认静态选项卡【英文标题】:Primefacestabviewsetdefaultstatictab【发布时间】:2019-11-1715:56:29【问题描述】:我在primefacesTabView组件中实现了动态选项卡。现在选项卡已成功打开和关闭,没有任何问题。现在,我... 查看详情

动态 TabView primefaces,选项卡渲染属性不起作用

】动态TabViewprimefaces,选项卡渲染属性不起作用【英文标题】:DynamicTabViewprimefaces,tabrenderedattributedoesn\'twork【发布时间】:2015-12-2019:03:29【问题描述】:我有一个来自Primefaces的tabView选项卡组件的“问题”。我做了一个基于数组... 查看详情

Primefaces tabview 验证与动态选项卡

】Primefacestabview验证与动态选项卡【英文标题】:Primefacestabviewvalidationwithdynamictab【发布时间】:2018-12-3015:18:39【问题描述】:我有一个基于列表和属性“dynamic=true”的带有动态选项卡数的p:tabview。<p:tabViewid="customer-master-data-tab... 查看详情

primefaces tabView 使用动态选项卡查看不同的选项卡内容

】primefacestabView使用动态选项卡查看不同的选项卡内容【英文标题】:primefacestabViewdifferenttabcontentwithdynamictabs【发布时间】:2015-05-1013:28:02【问题描述】:我的tabView有问题。第一个选项卡应始终显示相同的内容(称为搜索模板,... 查看详情

Primefaces ajax 更新

】Primefacesajax更新【英文标题】:Primefacesajaxupdate【发布时间】:2011-12-1706:54:18【问题描述】:我有primefaces数据表,<p:panelid="resultpanel"><p:dataTableid="tbl"var="job"value="#report.jobModel"paginator="true"rows="#report.jobModel.pa 查看详情

为啥使用 Primefaces 更新 ajax 后字段会重置

】为啥使用Primefaces更新ajax后字段会重置【英文标题】:WhyarefieldsresetafterajaxupdatewithPrimefaces为什么使用Primefaces更新ajax后字段会重置【发布时间】:2015-09-0900:08:03【问题描述】:在表格上,我有一些个人信息(姓名、地址等)和... 查看详情

JSF(Primefaces)通过ID更新几个元素的ajax

】JSF(Primefaces)通过ID更新几个元素的ajax【英文标题】:JSF(Primefaces)ajaxupdateofseveralelementsbyID\'s【发布时间】:2011-05-2708:43:52【问题描述】:关于JSF的另一个问题。特别是Primefaces。同时通过id对元素进行ajax更新有以下问题。如果... 查看详情

发生验证错误后,如何使用 PrimeFaces AJAX 填充文本字段?

】发生验证错误后,如何使用PrimeFacesAJAX填充文本字段?【英文标题】:HowcanIpopulateatextfieldusingPrimeFacesAJAXaftervalidationerrorsoccur?【发布时间】:2011-10-0207:17:22【问题描述】:我在视图中有一个表单,它为自动完成和gmap本地化执行a... 查看详情

数据未显示在由 viewscope spring bean 管理的 Primefaces 选项卡中

】数据未显示在由viewscopespringbean管理的Primefaces选项卡中【英文标题】:DatanotbeingdisplayedinPrimefacestabmanagedbyviewscopespringbean【发布时间】:2015-11-2605:52:04【问题描述】:我正在使用primefaces5.1、jsf2.2(Mojarra)、spring4.1.6、prettyfaces2.3.3... 查看详情

Primefaces p:tabView:selectOneMenu的值丢失

】Primefacesp:tabView:selectOneMenu的值丢失【英文标题】:Primefacesp:tabView:ValueofselectOneMenulost【发布时间】:2014-11-2706:12:04【问题描述】:当我使用带有dynamic="true"的p:tabView时遇到问题,并且在一个选项卡上有一个h:selectOneMenu,而在... 查看详情

使用 AJAX 更新 JSF/Primefaces 数据表中的单行

】使用AJAX更新JSF/Primefaces数据表中的单行【英文标题】:UpdatesinglerowinJSF/PrimefacesdatatableusingAJAX【发布时间】:2015-07-1904:51:38【问题描述】:使用AJAX时如何更新p:datatable中的单行?我不想更新整个数据表,因为它有很多行并且需... 查看详情

在没有 ajax 的情况下更新数据或在网络选项卡中记录请求 - Websockets

】在没有ajax的情况下更新数据或在网络选项卡中记录请求-Websockets【英文标题】:Updatingdatawithoutajaxorloggingofrequestinnetworktab-Websocekts【发布时间】:2017-12-2007:12:37【问题描述】:我发现一个网站正在更新其交易数据,这似乎就像... 查看详情

更新选择列表而不刷新 [PDO/PHP/AJAX]

...正在使用引导程序,并且我创建了将数据插入数据库的teo选项卡,但是第一个选项卡有一个选择列表,可以加载使用第二个选项卡中的表单插入的数据。问题是我无法在不刷新页面的情况下填写第一个选项卡中的选择列表。我在... 查看详情

来自另一种形式的面板的primefaces ajax更新[重复]

】来自另一种形式的面板的primefacesajax更新[重复]【英文标题】:primefacesajaxupdateofpanelfromanotherform[duplicate]【发布时间】:2012-12-2301:19:41【问题描述】:我这里有一些代码:<f:view><h:formid="formA"><p:treeTableid="tree"><p:aja... 查看详情

java示例代码_验证错误发生后,使用primefaces ajax填充文本字段

java示例代码_验证错误发生后,使用primefaces ajax填充文本字段 查看详情

在没有完整回发的 AJAX 更新面板中上传文件

...上传控件中上传的文件。确切的情况,我在页面上有8个选项卡,每个选项卡包含太多信息,其中一个选项卡是附件,当用户单击显示的添加新附 查看详情

如何在primefaces中的ajax调用后不关闭组件的情况下更新p:selectCheckboxMenu的标签?

】如何在primefaces中的ajax调用后不关闭组件的情况下更新p:selectCheckboxMenu的标签?【英文标题】:Howtoupdatethelabelofp:selectCheckboxMenuwithoutthecomponentbeingclosedafterajaxcallinprimefaces?【发布时间】:2012-04-1510:11:19【问题描述】:当我尝试... 查看详情

JSF/PrimeFaces ajax 更新破坏了 jQuery 事件侦听器函数绑定

】JSF/PrimeFacesajax更新破坏了jQuery事件侦听器函数绑定【英文标题】:JSF/PrimeFacesajaxupdatesbreaksjQueryeventlistenerfunctionbindings【发布时间】:2013-01-0206:19:50【问题描述】:我正在使用jQuery为HTML中的每个input注册一个change事件侦听器,如... 查看详情