2012-10-10 5 views
2

J'utilisais un plugin d'exportation pour mon application grails. Comment puis-je transmettre une instance de liste au contrôleur? J'ai dans mon gsp:Passer la valeur de gsp au contrôleur

<g:set var="fruitInstanceList" name="fruitInstanceList" value="${fruitInstanceList}"/> 
    <export:formats formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']"/> 

et dans mon contrôleur:

if(params?.format && params.format != "html"){ 
    response.contentType = grailsApplication.config.grails.mime.types[params.format] 
    response.setHeader("Content-disposition", "attachment; filename=books.${params.extension}") 
     exportService.export(params.format, response.outputStream,params.fruitInstanceList, [:], [:]) 
    } 

Le travail ne marche pas de code parce que le fruitInstanceList est de ne pas passer au contrôleur. Comment puis-je faire ceci? Passer la valeur de la GSP au contrôleur en utilisant le code ci-dessus?

S'il vous plaît, aidez, merci.

+0

Mais comment appelez-vous le contrôleur de la vue ??? –

Répondre

0

Cette variable est disponible uniquement sur la page. vous pouvez le passer en utilisant les paramètres

<export:formats formats ="[]", params ="[fruitInstanceList:${fruitInstance}]"/> 
0

Vous ne pouvez pas passer la liste en tant que paramètre à partir de vues. Puisque les paramètres iront au contrôleur comme get, le paramètre sera concaténé à l'URL et convertira en chaîne.

Donc ce que vous voulez faire est, vous devez faire la logique dans cette action où vous utilisez le code d'exportation.

c.-à-d., Comment vous obtenez la liste dans le contrôleur et l'envoie aux vues? De la même manière, ici vous devez faire une logique métier et obtenir la liste puis l'envoyer au plugin export.

1

Vous n'avez pas besoin de transmettre vos données de rapport jusqu'au contrôleur. Vous avez ces données (ici 'fruitInstanceList') du contrôleur, peut-être basé sur certaines options de filtre. Tout ce que vous devez faire est de nouveau POST options de filtre pour le contrôleur qui va alors chercher les mêmes données (c'est-à-dire 'fruitInstanceList'), puis l'exporter vers le format désiré. Le code Skelton ressemblerait à quelque chose comme ce qui suit:

reportFilter.gsp

<form name="fruitsFilterForm" action="fruitsReport" controller="report"> 
    <input type="text" name="search" value="${params.search}" /> 
    <input type="submit" value="Show Report" /> 
</form> 

fruitsReport.gsp

<form name="reportExportForm" action="exportFruitsReport" controller="report"> 
    <input type="text" name="search" value="${params.search}" /> 
    <input type="hidden" name="format" value="${defaultFormat}" /> 
    <input type="submit" value="Export" /> 
</form> 

ReportController.groovy

def reportService 
def fruitsReport() { 
    def fruitInstanceList = reportService.fetchFruitsList(params); 
    [fruitInstanceList: fruitInstanceList, params: params, defaultFormat: "excel"] 
} 

def exportFruitsReport() { 
    def fruitInstanceList = reportService.fetchFruitsList(params); 

    /** All your code to export the fetched fruitInstanceList **/   
} 

ReportService.groovy

def fetchFruitsList(params) { 
    return Fruit.findAll(/* your query based on the params */) 
} 

NOTE

Si vous insistez pour transmettre les données de gsp à la place contrôleur, vous pouvez toujours le faire en publiant votre liste avec un appel ajax. (mais ce serait une approche sale)

Questions connexes