2012-04-02 5 views
2

Я полностью изменил свой код. Но активный индекс все еще показывает проблемы. Иногда его называют, а иногда нет. Что случилось с следующим кодом xhtml?Активен активен активный индекс tabvas.

<?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


Update: @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> 

У меня много вкладок табуляции и аккордеона. activeindex работал, когда я сделал required="false" для каждого компонента одной вкладки. Изменение всего на required="true" вызвало activeindex не работать, но если вы перейдете на required="false" компонентов только одной вкладки activeindex работает просто отлично.

+0

В чем конкретно проблема, неясно. Не могли бы вы дать подробности. Кроме того, будет полезно, если будет опубликован источник bean-компонента – rags

ответ

4

Если <p:tabView находится в <h:form, _activeIndex обновляется. Если <p:tabView НЕ находится в <h:form, _activeIndex НЕ обновляется. Это можно увидеть в POST, используя Firebug.

Из того, что я могу сказать, _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

+0

искал это уже пару дней. работает как шарм с PF 4-SNAPSHOT и Mojarra 2.19 на JBoss 7.1.1 – Przemek

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... 
    } 
} 

Я надеюсь, что это помогает ...

Good Luck !

Смежные вопросы