p:selectOneMenu和p:selectBooleanCheckBox值在嵌套的p:tabview中没有绑定

时间:2014-11-09 19:42:16

标签: primefaces jsf-2.2 tabview

这是我的xhtml,主tabview设置为dynamic="true"cache="false"

    <?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:p="http://primefaces.org/ui"
     xmlns:pe="http://primefaces.org/ui/extensions">
      <h:head>
         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
      </h:head>
      <h:body>
      <h:form id="form">

    <p:commandButton id="save" value="save"
        action="#{nestedTabviewTestBean.savePersonValues}" process="@form"
        update="@form" />

      <p:tabView activeIndex="#{nestedTabviewTestBean.activeIndex}" dynamic="true" cache="false"
         value="#{nestedTabviewTestBean.tabsList}" var="tab">
            <p:ajax event="tabChange" listener="#{nestedTabviewTestBean.tabChangeListener}"  update="@form"></p:ajax>
          <p:tab title="#{tab.title}">
             <p:tabView activeIndex="0">           
                <p:tab title="testingNestedTabs">
                   <p:selectOneMenu id="selectOneMenu" value="#{nestedTabviewTestBean.activePerson.title}">
                    <f:selectItem itemLabel="Mr" itemValue="mr" ></f:selectItem>
                    <f:selectItem itemLabel="Misses" itemValue="misses" ></f:selectItem>
                    <f:selectItem itemLabel="Miss" itemValue="miss" ></f:selectItem>
                   </p:selectOneMenu>
                   <p:inputText id="name" value="#{nestedTabviewTestBean.activePerson.name}"></p:inputText> 
                   <p:selectBooleanCheckbox id="majorOrMinor"
                    value="#{nestedTabviewTestBean.activePerson.isMajor}"></p:selectBooleanCheckbox>                    
               </p:tab>        
            </p:tabView>
         </p:tab>        
     </p:tabView>
  </h:form> 
 </h:body>
 </html>     

这是我的视图范围bean

 public class NestedTabviewTestBean {
   private List<Tab> tabsList = new ArrayList<>();
   private Integer activeIndex = 0;
   private List<Person> personsList = new ArrayList<>();
   private Person activePerson;

   @PostConstruct
   public void load() {
     Tab tab1 = new Tab();
     tab1.setId("tab1");
     tab1.setTitle("tab1");     
     tabsList.add(tab1);

     Tab tab2 = new Tab();
     tab2.setId("tab2");
     tab2.setTitle("tab2");     
     tabsList.add(tab2);    

     personsList.add(new Person("mr", "Srikanth", true));
     personsList.add(new Person("mr", "Madhu", false));
     activePerson = personsList.get(activeIndex);
}

public void tabChangeListener(TabChangeEvent event) {
    System.out.println("save start");
    activePerson = personsList.get(activeIndex);        
    System.out.println("title :"+activePerson.getTitle()+": Name:"+activePerson.getName()+" :major :"+activePerson.getIsMajor());
    System.out.println("save End");
}

public void savePersonValues() {
    System.out.println("save start");
    System.out.println("title :"+activePerson.getTitle()+": Name:"+activePerson.getName()+" :major :"+activePerson.getIsMajor());
    System.out.println("save End");
}
}  

在页面加载时,默认情况下会加载第一个选项卡内容。现在,如果单击“保存”按钮,则下拉值将设置为null,并且复选框值始终设置为false。

如果我导航到主tabview中的最后一个标签,然后点击保存按钮,则值会正确绑定。

这是一个我无法弄清楚的奇怪问题。

我正在使用primefaces 4.0和mojarra jsf 2.2.4

1 个答案:

答案 0 :(得分:0)

Primefaces tabview目前有点破碎(我使用的是5.1版本)。尽量避免它或满足像这样的肮脏的解决方法:

Primefaces TabView does not maintain selectOneMenu Values