2012-04-02 61 views
2

我已經完全更改了我的代碼。但活躍指數仍然存在問題。有時會被調用,有時卻不會。 下面的xhtml代碼有什麼問題?Primefaces tabview活動索引無法正常工作

<?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:ui="http://java.sun.com/jsf/facelets" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:p="http://primefaces.org/ui" > 
    <h:head> 
     <title>Admin Panel</title> 

     <style type="text/css"> 
      .ui-accordion .ui-accordion-content{ 
       background-color: #eedae3; 
      } 
      .ui-accordion .ui-accordion-header { 
       height: 30px; 
       background-color: #e74f54; 
      } 
      .ui-tabs .ui-tabs-nav li{ 
       background-color: #6f97df; 
       height: 35px; 
      } 
      .datatable{ 
       background-color: #eedae3; 
      } 
     </style> 

    </h:head> 
    <h:body> 
     <p:tabView id="tabView" activeIndex="#{profileInfoManagedBean.myCurrentTab}" > 
      <p:ajax event="tabChange" listener="#{profileInfoManagedBean.tabIsChangedKana}" /> 


      <p:tab id="locationInfoTab" title="Location Info"> 

       <h:form id="form1"> 
        <p:growl showDetail="true" /> 

        <p:panel header="New Country"> 
         <h:panelGrid columns="3" cellpadding="5" cellspacing="5"> 

          <p:column> 
           <h:outputLabel for="country" value="Country: "></h:outputLabel> 
          </p:column> 
          <p:column> 
           <p:inputText id="country" value="#{profileInfoManagedBean.country.country}" required="true" label="City"> 

            <f:validateLength minimum="5" maximum="20" /> 
            <p:ajax event="blur" update="msg1"></p:ajax> 
           </p:inputText> 
          </p:column> 
          <p:column> 
           <p:message id="msg1" for="country" display="icon"></p:message> 
          </p:column> 

         </h:panelGrid> 
         <p:commandButton type="submit" action="#{profileInfoManagedBean.addCountry}" value="Save" ajax="true" ></p:commandButton> 
        </p:panel> 

       </h:form> 
       <p:separator /> 

       <h:form id="countryDataTableForm"> 
        <p:panel> 
         <p:growl id="messagesww" /> 
         <p:confirmDialog id="confirmDialog" message="Are you sure you want to delete the selected row ?" 
             header="Deleting Row" severity="alert" widgetVar="confirmation1"> 
          <p:commandButton id="confirm" value="Yes Sure" update="messagesww" oncomplete="confirmation1.hide()" 
              action="#{profileInfoManagedBean.deleteObject}" /> 
          <p:commandButton id="decline" value="Not Yet" onclick="confirmation1.hide()" type="button" /> 
         </p:confirmDialog> 

         <p:dataTable style="width: 700px;" var="coun" value="#{profileInfoManagedBean.countryList}" selection="#{profileInfoManagedBean.deletingObj}" rowKey="#{coun.countryId}" 
            paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
            paginator="true" rows="5" rowsPerPageTemplate="10,15,20,25" editable="true"> 
          <p:ajax event="rowEdit" update="@this" 
            listener="#{profileInfoManagedBean.onEditRow}" /> 


          <p:column headerText="Country"> 
           <p:cellEditor> 
            <f:facet name="output"> 
             <h:outputText value="#{coun.country}" /> 
            </f:facet> 
            <f:facet name="input"> 
             <p:inputText value="#{coun.country}" style="width:100%" /> 
            </f:facet> 
           </p:cellEditor> 
          </p:column> 

          <p:column id="inactive" filterBy="#{coun.isActive}" 
             headerText="isActive" footerText="exact" 
             filterOptions="#{profileInfoManagedBean.isActiveDropDown}" 
             filterMatchMode="exact"> 

           <p:cellEditor> 
            <f:facet name="output"> 
             <h:outputText value="#{coun.isActive}"></h:outputText> 
            </f:facet> 
            <f:facet name="input"> 
             <h:selectOneMenu value="#{coun.isActive}" > 
              <f:selectItem itemLabel="True" itemValue="true" /> 
              <f:selectItem itemLabel="False" itemValue="false" /> 
             </h:selectOneMenu> 
            </f:facet> 
           </p:cellEditor> 
          </p:column> 

          <p:column headerText="Edit"> 
           <p:rowEditor /> 
          </p:column> 

          <p:column headerText="Delete"> 

           <p:commandButton type="button" onclick="confirmation1.show()" 
               id="delCountry" title="Delete Country" icon="ui-icon ui-icon-trash" /> 
          </p:column> 

          <p:column selectionMode="single"> 
           <f:facet name="header"> 
            <h:outputText value="select" /> 
           </f:facet> 
          </p:column> 


         </p:dataTable> 
        </p:panel> 

       </h:form> 

      </p:tab> 






      <p:tab id="basicInfoTab" title="Basic info"> 
       <p:accordionPanel id="aPanel1"> 
        <p:tab id="tab2" title="basic info"> 
         <h:form id="dkk"> 
          This is basic info tab. 
         </h:form> 
         <h:form id="ddkk"> 
          This is basic info tab. 
         </h:form> 
        </p:tab> 
       </p:accordionPanel> 
      </p:tab> 



     </p:tabView> 
    </h:body> 
</html> 

我使用primefaces 3.2,JSF 2.1,Tomcat的7上,NetBeans 7.1,Hibernate3中


更新:@rags 我是有在activeindex一些問題。 在activeindex和所有東西開始工作後,我開始比較我的代碼,以便知道發生了什麼問題。 現在,當我在輸入字段和其他組件中將required =「false」更改爲required =「true」時,activeindex將不再起作用。

<?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:ui="http://java.sun.com/jsf/facelets" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:p="http://primefaces.org/ui" > 
    <h:head> 
     <title>Admin Panel</title> 

     <script type="text/javascript"> 
      function deleteObj(x){ 
       //alert("checking javascript - " + x); 
      } 
     </script> 

     <style type="text/css"> 
      .ui-accordion .ui-accordion-content{ 
       background-color: #eedae3; 
      } 
      .ui-accordion .ui-accordion-header { 
       height: 30px; 
       background-color: #e74f54; 
      } 
      .ui-tabs .ui-tabs-nav li{ 
       background-color: #6f97df; 
       height: 35px; 
      } 
      .datatable{ 
       background-color: #eedae3; 
      } 
     </style> 

    </h:head> 
    <h:body> 
     <h:form id="mainForm"> 

      <p:growl id="growl" showDetail="true" /> 

      <p:confirmDialog id="confirmDialog" message="Are you sure you want to delete the selected row ?" 
          header="Deleting Row" severity="alert" widgetVar="confirmation1"> 


       <p:commandButton id="confirm" value="Yes Sure" update=":mainForm:growl mainForm:myTabViewID:aPanel:countryTable" oncomplete="confirmation1.hide()" 
           action="#{profileInfoManagedBean.deleteObject}"> 
        <!--          <f:ajax render=":mainForm" />--> 
       </p:commandButton> 
       <p:commandButton id="decline" value="Not Yet" onclick="confirmation1.hide()" type="button" /> 
      </p:confirmDialog> 

      <p:tabView id="myTabViewID" activeIndex="#{profileInfoManagedBean.myCurrentTab}" > 
       <p:ajax event="tabChange" listener="#{profileInfoManagedBean.tabIsChanged}" /> 


       <p:tab id="locationInfoTab" title="Location Info"> 

        <p:accordionPanel id="aPanel" activeIndex="#{profileInfoManagedBean.myCurrentATab}"> 
         <p:tab id="tab1" title="Country"> 

          <p:outputPanel> 
           <h:panelGrid columns="3" cellpadding="5" cellspacing="5"> 

            <p:column> 
             <h:outputLabel for="country" value="Country: "></h:outputLabel> 
            </p:column> 
            <p:column> 
             <p:inputText id="country" value="#{profileInfoManagedBean.country.country}" required="false" label="Country"> 
              <p:watermark value="Enter a country name" for="country" /> 
              <f:validateLength for="country" minimum="5" maximum="20" /> 
              <p:ajax event="blur" update="msg1" /> 
              <f:validateRequired for="country" /> 
             </p:inputText> 
            </p:column> 
            <p:column> 
             <p:message id="msg1" for="country" display="icon"></p:message> 
            </p:column> 

           </h:panelGrid> 
           <p:commandButton value="Add" action="#{profileInfoManagedBean.addCountry}" update=":mainForm" style="margin:10px 0" id="btnAdd"/> 
          </p:outputPanel> 

          <p:separator /> 
          <p:outputPanel id="countryTable"> 

           <p:dataTable style="width: 700px;" var="coun" value="#{profileInfoManagedBean.countryList}" selection="#{profileInfoManagedBean.deletingObj}" rowKey="#{coun.countryId}" 
              paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
              paginator="true" rows="5" rowsPerPageTemplate="10,15,20,25" editable="true"> 
            <p:ajax event="rowEdit" update="@this" 
              listener="#{profileInfoManagedBean.onEditRow}" /> 

            <p:confirmDialog id="confirmDialog" message="Are you sure you want to delete the selected row ?" 
                header="Deleting Row" severity="alert" widgetVar="confirmation2"> 
             <p:commandButton id="confirm" value="Yes Sure" update=":mainForm" oncomplete="confirmation2.hide()" 
                 action="#{profileInfoManagedBean.deleteObject}" /> 
             <p:commandButton id="decline" value="Not Yet" onclick="confirmation2.hide()" type="button" /> 
            </p:confirmDialog> 


            <p:column headerText="Country"> 
             <p:cellEditor> 
              <f:facet name="output"> 
               <h:outputText value="#{coun.country}" /> 
              </f:facet> 
              <f:facet name="input"> 
               <p:inputText value="#{coun.country}" style="width:100%" /> 
              </f:facet> 
             </p:cellEditor> 
            </p:column> 

            <p:column id="inactive" filterBy="#{coun.isActive}" 
               headerText="isActive" footerText="exact" 
               filterOptions="#{profileInfoManagedBean.isActiveDropDown}" 
               filterMatchMode="exact"> 

             <p:cellEditor> 
              <f:facet name="output"> 
               <h:outputText value="#{coun.isActive}"></h:outputText> 
              </f:facet> 
              <f:facet name="input"> 
               <h:selectOneMenu value="#{coun.isActive}" > 
                <f:selectItem itemLabel="True" itemValue="true" /> 
                <f:selectItem itemLabel="False" itemValue="false" /> 
               </h:selectOneMenu> 
              </f:facet> 
             </p:cellEditor> 
            </p:column> 

            <p:column headerText="Edit"> 
             <p:rowEditor /> 

            </p:column> 

            <p:column headerText="Delete"> 
             <p:commandButton update=":mainForm:growl :mainForm:myTabViewID:aPanel:countryTable" icon="ui-icon-circle-close" action="#{profileInfoManagedBean.deleteCountry(coun.countryId)}" 
                 title="Delete Country" style="border-color:#FF0000" /> 
            </p:column> 


           </p:dataTable> 
          </p:outputPanel> 

         </p:tab> 

         <p:tab id="tab2" title="Province"> 

          <p:outputPanel> 
           <h:panelGrid columns="3" cellpadding="5" cellspacing="5"> 

            <p:column> 
             <p:selectOneMenu value="#{profileInfoManagedBean.province.country.countryId}" id="cou" 
                 required="false"> 
              <f:selectItem itemLabel="Select Here" itemValue="" /> 
              <f:selectItems 
               value="#{profileInfoManagedBean.countryList}" 
               var="coun" itemValue="#{coun.countryId}" itemLabel="#{coun.country}" /> 
              <p:ajax event="blur" update="msg2" /> 
             </p:selectOneMenu><p:message id="msg2" for="cou" display="icon" /> 
            </p:column> 

            <p:column> 
             <h:outputLabel for="province" value="Province: "></h:outputLabel> 
            </p:column> 
            <p:column> 
             <p:inputText id="province" value="#{profileInfoManagedBean.province.province}" required="false" label="Province"> 
              <p:watermark value="Enter a province name" for="province" /> 
              <f:validateLength minimum="5" maximum="20" /> 
              <p:ajax event="blur" update="msg3"></p:ajax> 
             </p:inputText> 
            </p:column> 
            <p:column> 
             <p:message id="msg3" for="province" display="icon"></p:message> 
            </p:column> 

           </h:panelGrid> 
           <p:commandButton value="Add" action="#{profileInfoManagedBean.addProvince}" update=":mainForm" style="margin:10px 0" id="btnAddProvince"/> 
          </p:outputPanel> 

          <p:separator /> 
          <p:outputPanel id="provinceTable"> 

           <p:dataTable style="width: 700px;" var="prov" value="#{profileInfoManagedBean.provinceList}" selection="#{profileInfoManagedBean.deletingObj}" rowKey="#{prov.provinceId}" 
              paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
              paginator="true" rows="5" rowsPerPageTemplate="10,15,20,25" editable="true"> 
            <p:ajax event="rowEdit" update="@this" 
              listener="#{profileInfoManagedBean.onEditRow}" /> 


            <p:column headerText="Province"> 
             <p:cellEditor> 
              <f:facet name="output"> 
               <h:outputText value="#{prov.province}" /> 
              </f:facet> 
              <f:facet name="input"> 
               <p:inputText value="#{prov.province}" style="width:100%" /> 
              </f:facet> 
             </p:cellEditor> 
            </p:column> 

            <p:column id="inactive" filterBy="#{coun.isActive}" 
               headerText="isActive" footerText="exact" 
               filterOptions="#{profileInfoManagedBean.isActiveDropDown}" 
               filterMatchMode="exact"> 

             <p:cellEditor> 
              <f:facet name="output"> 
               <h:outputText value="#{prov.isActive}"></h:outputText> 
              </f:facet> 
              <f:facet name="input"> 
               <h:selectOneMenu value="#{prov.isActive}" > 
                <f:selectItem itemLabel="True" itemValue="true" /> 
                <f:selectItem itemLabel="False" itemValue="false" /> 
               </h:selectOneMenu> 
              </f:facet> 
             </p:cellEditor> 
            </p:column> 

            <p:column headerText="Edit"> 
             <p:rowEditor /> 
             <p:commandButton icon="ui-icon-circle-close" onclick="deleteObj(5)" title="Delete Province" style="border-color:#FF0000" /> 
            </p:column> 

            <p:column headerText="Delete"> 

             <p:commandButton type="button" onclick="confirmation1.show()" 
                 id="delProvince" title="Delete Province" icon="ui-icon ui-icon-trash" /> 
            </p:column> 

            <p:column selectionMode="single"> 
             <f:facet name="header"> 
              <h:outputText value="select" /> 
             </f:facet> 
            </p:column> 


           </p:dataTable> 
          </p:outputPanel> 

         </p:tab> 

        </p:accordionPanel> 

       </p:tab> 


       <p:tab id="basicInfoTab" title="Basic info"> 
        <p:accordionPanel id="aPanel1"> 
         <p:tab id="tab2" title="basic info"> 
          This is basic info tab. 
          This is basic info tab. 
         </p:tab> 
        </p:accordionPanel> 
       </p:tab> 



      </p:tabView> 
     </h:form> 
    </h:body> 
</html> 

我有很多tabview和手風琴選項卡。 activeindex當我爲一個標籤的每個組件製作required="false"時工作。全部更改爲required="true"導致activeindex不能正常工作,但如果更改爲required="false"的組件只有一個標籤activeindex工作得很好。

+0

問題究竟是什麼,目前尚不清楚。你能否提供細節?此外,如果發佈bean的來源將會很有用 – rags 2012-04-03 08:29:59

回答

4

如果<p:tabView<h:form中,則更新_activeIndex。 如果<p:tabView不在<h:form中,_activeIndex不會更新。 這可以在使用Firebug的POST中看到。

從我可以告訴,_activeIndex和_activetab應該與TabView組件具有相同的值。

我用多個選項卡下面的代碼,不同的形式在每個標籤:

public void tabIsChanged(TabChangeEvent event) { 
    //This code was taken directly from TabViewRenderer. 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Map<String, String> params = context.getExternalContext().getRequestParameterMap(); 
    TabView tabView = (TabView) event.getComponent(); 
    String activeIndexValue = params.get(tabView.getClientId(context) + "_tabindex"); 

    //this.activeTab = Integer.parseInt(activeIndexValue); 
    this.myCurrentATab = Integer.parseInt(activeIndexValue); 

} 

或許這對你的解決方案。

+0

我正在使用:Prime Faces 3.2,Mojarra 2.1.7,Apache Tomcat 7.0.26 – wwhite 2012-05-17 07:40:37

+0

正在爲此搜索幾天。像JB4.1.1上的PF 4-SNAPSHOT和Mojarra 2.19一樣具有魅力 – Przemek 2013-06-07 13:38:30

1

如果你想控制有源標籤,這是一種方式:


<p:tabView> 

    <p:ajax event="tabChange" listener="#{bean.onTabChange}"/> 

    <p:tab title="TitleTabOne"></p:tab> 
    <p:tab title="TitleTabTwo"></p:tab> 
    <p:tab title="TitleTabThree"></p:tab> 

</p:tabView> 

public void onTabChange(TabChangeEvent event) { 
    TabView tabView = (TabView) event.getComponent(); 
    int activeTabIndex = tabView.getActiveIndex(); 
    System.out.println(activeTabIndex); 
    if(activeTabIndex == 1){      
     // Your tab is active, do something... 
    } 
} 

我希望這有助於...

好運!