2010-05-27 6 views
1

Je développe une application web Seam-Jsfv1.2-EJB3. J'ai une datatable et des cases à cocher dans chaque rangée. De plus, j'ai un crypteur de données au bas de ma table aussi.Problème <rich: datatable> et <rich: datascroller>

Mon problème est que lorsque je clique sur le numéro de page suivant du défileur, les cases à cocher sélectionnées à la première page du datatable ont disparu. Je veux dire, même s'ils ont été sélectionnés, en cliquant sur la page suivante, ils sont désélectionnés. Je le vois en revenant à la première page en cliquant sur le défilement.

Avez-vous une idée de ce problème? Pour clearify mon cas, j'attaché mon code ci-dessous:

<rich:dataTable 
      id="apiV2ProductList" rows="10" var="_apiV2Product" 
      value="#{apiV2ProductList.resultList}" 
      rendered="#{not empty apiV2ProductList.resultList}" reRender="ds"> 
      <rich:column> 
       <f:facet name="header"> 
        <h:selectBooleanCheckbox id="selectionCheckAll" onclick="selectAll()" /> 
       </f:facet> 
       <h:selectBooleanCheckbox id="selectionCheck" onclick="increase(this)" value="#{_apiV2Product.selectValue}" > 
       </h:selectBooleanCheckbox> 
      </rich:column> 

...

<f:facet name="footer"> 
       <rich:datascroller id="ds" renderIfSinglePage="false"> 
       </rich:datascroller> 
      </f:facet> 

Un grand merci à l'avance. Baris

Répondre

2

Ajout d'une étiquette de support a4j entre changeurs a résolu mon problème: (. Ex de la souris et à l'extérieur)

<f:facet name="footer"> 
    <rich:datascroller id="ds" renderIfSinglePage="false"> 
    <a4j:support event="onpagechange"/> 
    </rich:datascroller> 
</f:facet> 

Cependant l'autre chose est, je me sers JQuery de style ma table, et cette fois, quand je clique sur la page suivante de ma table, le style est parti.

Toute aide serait grande, merci beaucoup à l'avance. PS: BTW la chose la plus wierest à mon avis est qu'il m'est impossible de trouver une solution par vous-même pour ce genre de problèmes. Votre création n'est peut-être pas toujours suffisante pour résoudre (au moins ici dans mon exemple, en ajoutant a4j: support) Je demande à des experts, comment pouvons-nous gérer ce genre de choses par nous-mêmes ... **

+0

Merci, vous m'avez économisé beaucoup de temps avec votre réponse – TeFa

1

« t besoin jQuery pour le style datatable

<rich:dataTable id="dataTable" var="x" 
onRowMouseOver="this.style.backgroundColor='#F1F1F1'" 
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" 
+0

Oui, c'est vrai aussi. Merci d'avoir donné une alternative au style. – Javatar

2

Vous pouvez étendre la org.richfaces.renderkit.html.DatascrollerTemplate écrire votre propre DataScroller pour votre propre style en ajoutant un composant avec la configuration ci-dessous dans les faces-config.xml

<component> 
    <component-type>exCustHtmlDatascroller</component-type> 
    <component-lass>org.jsf.common.ui.EXCustHtmlDatascroller</component-class> 
</component> 
<render-kit> 
    <renderer> 
     <component-family>org.richfaces.Datascroller</component-family> 
     <renderer-type>exCustDataScrollerTemplate</renderer-type> 
     <renderer- class>org.jsf.common.ui.EXCustDataScrollerTemplate</renderer-class> 
    </renderer> 
</render-kit> 
1

Le problème que vous voyiez avec les styles supprimés est dû à la nature d'AJAX et à la façon dont la table est reRendered.

En supposant que vous lanciez l'appel de style initial basé sur une forme de page onLoad, la première fois que la page est rendue, vos styles seront appliqués. Toutefois, lorsque vous cliquez sur le bouton "Suivant" avec le paginateur, vous réduisez beaucoup de nouveaux HTML et remplacez l'ancien HTML dans le tableau par les informations plus récentes et mises à jour. Le proble que vous voyez est que vous avez vu le style parce que jQuery a appliqué des styles aux noeuds vieux, sur reRender, ces noeuds sont complètement jetés, avec leur style. Vous avez simplement besoin de comprendre le hook pour appeler la méthode "styling", et ré-exécuter cet appel après que la table soit rendue.

Généralement, j'utilise une balise d'état a4j: et configure le onstart ou le onstop pour ré-analyser la table.