Я пишу приложение Grails и сталкиваюсь с какой-то странной проблемой. При нажатии кнопки отправки на странице соответствующее действие вызывается дважды подряд. Это заставляет все ломаться ужасно. Кто-нибудь еще видел эту проблему раньше? Ниже мой код:Действия Grails вызываются дважды. Помогите!
С 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!" />
От контроллера:
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;
}
Выход:
!!!!!! !!!!!!!!!!!!!!!!!!!!!!
Сб 17 сентября 00:00:00 EDT 1994
Время 1284757543744
****************************
!! !!!!!!!!!!!!!!!!!!!!!!!!!!
нуль
Время 1284757544091
****************************
2010-09-17 17: 05: 44,100 [ HTTP-8080-2] ERROR errors.GrailsExceptionResolver - нуль
java.lang.NullPointerException
Вы можете увидеть действие вызывается дважды несколько миллисекунд после первого звонка. Система выходит из строя, потому что во время второго вызова объект даты имеет значение NULL. Есть идеи? Благодаря!
Я понял, спасибо за ваш комментарий! Оказывается, когда отображаемый контент включает в себя атрибут, например: , где атрибут пуст, браузер снова запрашивает эту информацию. Поскольку объект существовал только в контексте первого вызова, второй звонок бомбил. Другими словами, это связано с попыткой отобразить некоторый XML на странице, которая была визуализирована. –
Quad64Bit