Page 1 sur 1

[RESOLU] Case à Cocher vue Xpages

MessagePublié: 11 Fév 2014 à 17:17
par fripouille76
Salut à tous

une petite question pour les experts :)

j'utilise une colonne dédiée case à cocher dans une vue Xpages jusque la pas de souci.
Je peux facilement récupérer les id des documents sélectionnés.

SAUF.....si j'ai plusieurs pages, en effet lorsque vous sélectionnez un doc sur la première page et que vous allez sur la seconde, pour en sélectionner d'autres tout bêtement => Ceux sélectionner sur la première sont décochés.
j'ai testé différent truc et option, mais rien ne fonctionne.

Comment garder en mémoire les sélections sur les pages des vues ? (en évitant les usines à gaz)

Re: Case à Cocher vue Xpages

MessagePublié: 11 Fév 2014 à 21:56
par roubech
si tu récupères les Id directement dans les cases à cocher au niveau de ton traitement, en changeant de pages, seules les cases à cocher de la page courant existent.
si tu stockes les ID dans un vector en viewScope au fur et à mesure que le user les coches ou décoche, par exemple, tu devrais pouvoir les conserver d'une pages à l'autre (si ta pagination est bien en partial refresh) ?

Re: Case à Cocher vue Xpages

MessagePublié: 12 Fév 2014 à 09:34
par Massilia56
Perso côté IHM je trouve ca déroutant pour le user de conserver les checkbox cochées sur une page lors du passage à une autre page.
Après tout dépend de l'utilisation que tu souhaites en faire...
Ou alors oui stocker les ID dès que tu coches mais attention à aussi gérer le décochage...
Pour éviter les usines à gaz il faut souvent apporter une autre solution :wink: (augmenter le nombre de lignes affichées..., alerter qu'il y a des cases cochées à traiter lors du passage à la page suivante...)

Re: Case à Cocher vue Xpages

MessagePublié: 12 Fév 2014 à 15:33
par mike76
regarde ce lien :
http://openntf.org/XSnippets.nsf/snippe ... -in-a-view

Code : Tout sélectionner
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
 
  <xp:viewPanel id="viewPanel1">
    <xp:this.facets>
      <xp:pager partialRefresh="true" layout="Previous Group Next"
        xp:key="footerPager" id="pager1">
      </xp:pager>
      <xp:scriptBlock id="scriptBlockViewPanel" xp:key="south">
        <xp:this.value>
          <![CDATA[
            dojo.addOnLoad( function(){
              dojo.query(".xspCheckBoxViewColumn").connect('onclick', function() {
                  viewPanelHelper.addDoc( this.id, this.checked, this.value );
                  viewPanelHelper.updateDataField('#{id:viewPanelSelectedIds}');
              });
              viewPanelHelper.rebuildDocSelection();   
              viewPanelHelper.updateDataField('#{id:viewPanelSelectedIds}');
            });
          ]]></xp:this.value>
      </xp:scriptBlock>
      <xp:inputHidden id="viewPanelSelectedIds" xp:key="southEast" />
    </xp:this.facets>
    <xp:this.data>
      <xp:dominoView var="view1" viewName="All"></xp:dominoView>
    </xp:this.data>
    <xp:viewColumn columnName="DocUNID" id="viewColumn1" showCheckbox="true">
      <xp:viewColumnHeader value="DocUNIDs" id="viewColumnHeader1" />
    </xp:viewColumn>
  </xp:viewPanel>
     
  <xp:scriptBlock id="scriptBlockViewPanelHelper">
    <xp:this.value>
      <![CDATA[     
      /**
       * viewPanelHelper
       *
       * keeps selection of a view panel
       * stores data in hidden input field
       * @author Sven Hasselbach
       * @category CSJS
       * @category Helper
       * @version 1.3
       */
      viewPanelHelper = {
        selDocs: function(){ new Array() },
         
        addDoc: function( id, checked, noteId ){
          viewPanelHelper.selDocs[ noteId ] = { 'id': id, 'checked': checked , 'noteId': noteId };
        },
        rebuildDocSelection: function (){   
          dojo.query(".xspCheckBoxViewColumn").forEach(
              function( obj ){
                  if( viewPanelHelper.selDocs[obj.value] )
                    obj.checked = viewPanelHelper.selDocs[obj.value].checked;
              }
          )
   
        },
        getSelectedNoteIds: function(){
          var list = "";
          for( e in viewPanelHelper.selDocs ){
            if( viewPanelHelper.selDocs[e].checked === true ){
              if( list !== "" ) list +=",";
              list += viewPanelHelper.selDocs[e].noteId;
            }
          }
          return list
        },
        updateDataField: function(id){
          dojo.byId(id).value = viewPanelHelper.getSelectedNoteIds();
        }
         
      }
      ]]>
    </xp:this.value>
  </xp:scriptBlock>
 
  <xp:button value="Test" id="buttonTest">
    <xp:eventHandler event="onclick" submit="true"
      refreshMode="complete">
      <xp:this.action>
        <![CDATA[#{javascript:
          var value = getComponent("viewPanelSelectedIds").value;
          _dump( value )}]]>
      </xp:this.action>
    </xp:eventHandler>
  </xp:button>
   
</xp:view>

Re: Case à Cocher vue Xpages

MessagePublié: 12 Fév 2014 à 15:39
par fripouille76
Merci Mike76 :)......

Ca a l'air de fonctionner, l'idée est de stocker au fur et a mesure les id, des docs sélectionnés pour les conserver ensuite lors de retour sur les pages.
En fait le besoin, est surtout lié à une sélection de doc à partir d'une liste pouvant être conséquente, genre traitement exécuté sur un ensemble de document.