2010-09-17 4 views
2

J'écris une application de grails et de courir dans un problème étrange. Lorsque vous cliquez sur le bouton Soumettre d'une page, l'action associée est appelée deux fois rapidement. Cela provoque tout à casser horriblement. Quelqu'un d'autre a-t-il déjà vu ce problème? Voici mon code:Les actions de Grails sont appelées deux fois. Aidez-moi!

Sur la page GSP:

<g:form method="post" action="show"> 
<h2>All items since...</h2> 
<g:datePicker name="startDate" precision="day" value="${new Date()}" /><br/> 
<h2>Format</h2> 
<g:radio name="feedType" value="RSS1" checked="true"/><span>RSS 1.0</span> 
<g:radio name="feedType" value="RSS2"/><span>RSS 2.0</span> 
<g:radio name="feedType" value="ATOM"/><span>Atom</span><br/> 
<hr /> 
<h2>Topics</h2> 
<g:each in="${list}" var="subscription" status="i"> 
    <g:if test="${i == 0}"> 
    <g:radio name="nodeID" value="subscription.name" checked="true"/><span>${subscription.getPrettyName()}</span><br/> 
    </g:if> 
    <g:else> 
    <g:radio name="nodeID" value="${subscription.name}"/><span>${subscription.getPrettyName()}</span><br/> 
    </g:else> 
</g:each> 
<hr/> 
<g:submitButton name="getFeedButton" value="Get Feed!" /> 

À partir du contrôleur:

def show = { 
    def nodeID = params.nodeID 
    def feedType 
    if(params.feedType.equals("RSS1")){ 
     feedType = FeedType.RSS1; 
    } else if(params.feedType.equals("RSS2")){ 
     feedType = FeedType.RSS2; 
    } else{ 
     feedType = FeedType.ATOM; 
    } 
    def date = params.startDate 
    println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!") 
    println(date) 
    println("Time "+System.currentTimeMillis()); 
    println("****************************") 
    def feed = XMPPListenerService.getFeed(date, feedType, nodeID) 
    response.contentType = "text/xml" 
    response.outputStream << feed; 
} 

La sortie:

!!!!!! !!!!!!!!!!!!!!!!!!!!!!
Sam 17 septembre 1994 00:00:00 HAE
temps 1284757543744
****************************
!! !!!!!!!!!!!!!!!!!!!!!!!!!!
null
Temps 1284757544091
****************************
2010-09-17 17: 05: 44,100 [ http-8080-2] eRREUR errors.GrailsExceptionResolver - null
java.lang.NullPointerException

Vous pouvez voir l'action est appelée deux fois quelques millisecondes après le premier appel. Le système échoue car au moment du second appel, l'objet date est nul. Des idées? Merci!

Répondre

0

Avez-vous déjà résolu cela? Avez-vous essayé de changer l'action de show à enregistrer?

<g:form method="post" action="save"> 

au lieu de

<g:form method="post" action="show"> 

et le nom de la méthode en économie. Il est très étrange de voir voir "Action" sur la méthode post. Peut-être que Grails fait quelque chose derrière la scène parce que les grails font tellement de choses en fonction de la convention que vous n'êtes peut-être même pas au courant !!

+1

Je l'ai compris, merci pour votre commentaire! Il s'avère que lorsque le contenu rendu inclut un attribut tel que: où l'attribut est vide, le navigateur demande de nouveau cette information. Puisque l'objet n'existait que dans le contexte du premier appel, le second appel a été bombardé. En d'autres termes, il s'agissait d'essayer de rendre du XML à une page qui était rendue. – Quad64Bit

Questions connexes