2009-02-04 4 views
39

J'essaie de configurer un serveur pour un service paginé de source de données. J'ai tout mis en place pour que mon assembleur soit appelé et que je renvoie des valeurs, mais je ne reçois pas d'appels "paginés".Télécherie Flex/LCDS de serveur à source de données

Plus précisément:

public Collection fill(List fillArgs, int begin, int rows) 

est toujours appelée avec begin == -1 et rows == -1, au lieu d'obtenir des valeurs réelles à la page à travers. En outre:

public boolean useFillPage(List fillParameters) 

n'est jamais appelée (mon implémentation renvoie toujours vrai pour tous les paramètres). Il semble qu'il ne soit jamais appelé car JavaAdapter ne reçoit pas l'en-tête pageSize du client Flex.

Ceci est ma configuration de destination:

<destination id="invoiceListDataService"> 
    <adapter ref="java-dao" /> 
    <properties> 
    <scope>session</scope> 
    <source>com.williams.finance.invoice.dao.InvoiceReviewListAssembler</source> 
    <network> 
     <paging enabled="true" pageSize="100" /> 
    </network> 
    <metadata> 
     <identity property="invoiceNumber"/> 
    </metadata> 
    </properties> 
</destination> 

Et mon code Flex pour appeler le service de données:

myDataService = new DataService("invoiceListDataService"); 
myDataService.autoSyncEnabled=false; 
myDataService.fill(invoiceReviewListModel.invoiceList, params); 

Suis-je manque quelque chose ici? Des idées où commencer à chercher?

+0

Je commencerais en regardant dans cette params variable. Ce devrait être une instance contenant des informations "begin" et "rows"? Peut-être que votre Flex DataService ignore ce paramètre. –

+1

@Travis, vous avez demandé cela il y a un moment. Avez-vous trouvé une solution? BTW: Je recommande fortement [Charles Proxy] (http://www.charlesproxy.com/) pour vos besoins de débogage réseau.C'est un excellent outil de débogage qui vous aidera à comprendre ce qui est réellement envoyé entre flex et serveur. –

Répondre

1

Premièrement, Quelle est la définition de votre adaptateur? Essayez ceci:

<adapters> 
    <adapter-definition class="flex.data.adapters.JavaAdapter" 
     id="java-dao"></adapter-definition> 
</adapters> 

En second lieu, ajouter personnalisée = "true" attribut à votre propriété de pagination.

<paging enabled="true" pageSize="100" custom="true"/> 

En troisième lieu, peut-être changer votre portée à l'application

Quatrièmement, dans la définition de votre destination, ajoutez l'adaptateur = "java-dao" au lieu d'avoir une référence.

<destination adapter="java-dao" id="invoiceListDataService"> 

Cinquième, assurez-vous Overridding les méthodes nécessaires (useFillPage, remplissage de collection, etc.)

@Override 
public boolean useFillPage(List fillParameters) 
{ 
    // enabling paged-fill for all fills 
    return true; 
} 

Voir ce fil pour quelques réponses utiles à un problème similaire: http://www.mail-archive.com/[email protected]/msg111746.html

1

Votre configuration de destination semble terminée.

Vérifier que vous assembleur étend AbstractAssembler:

public class InvoiceReviewListAssembler extends AbstractAssembler 

et que vous remplacez les éléments suivants au minimum:

@Override 
public int count(List arg0) { 
    return -1; // or return the collection length. 
} 

@Override 
public boolean useFillPage(List fillParameters) {  
    return true; 
} 

@Override 
public Collection fill(List fillParameters, 
         PropertySpecifier ps, 
         int startIndex, 
         int numItems) { 
    // TODO 
} 
Questions connexes