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!
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