Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 Primefaces选项卡ajax部分更新错误_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 Primefaces选项卡ajax部分更新错误

Jsf 2 Primefaces选项卡ajax部分更新错误,jsf-2,primefaces,Jsf 2,Primefaces,我相信当试图用ajax对primefaces进行部分更新时,primefaces中存在一个bug。我在primefaces论坛上发布了同样的问题,但没有任何人回应 我附上了一个示例,其中我有一个带有两个选项卡的选项卡视图。当我单击“加载新选项卡内容”按钮时,它会调用我的支持bean来动态更改tab1的内容。它应该清除tab1的现有内容,并加载新内容,在这种情况下,新内容只是一个inputText。然后,我使用RequestContext.getCurrentInstance.updateupda

我相信当试图用ajax对primefaces进行部分更新时,primefaces中存在一个bug。我在primefaces论坛上发布了同样的问题,但没有任何人回应

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

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

dynamictabloding.xhtml **

**

TabManager.java **


谢谢

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

几年前,我已经从IceFaces JSF 1.2迁移到Primefaces。当时,我非常依赖绑定来更新组件,甚至生成页面内容,这太糟糕了。自从移动到Primefaces之后,我甚至一次都不需要使用绑定。我经常使用标签。与其给出一段抽象但可复制的代码,不如告诉我们您到底想做什么。也许有更好的方法来实现这一点。
<?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>
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;
   }

}