2010-09-17 6 views
2

Я пишу приложение 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. Есть идеи? Благодаря!

ответ

0

Вы уже решили это? Вы пытались изменить действие из шоу, чтобы сохранить его?

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

вместо

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

и имя метода, как сохранить. Очень странно видеть действие «Показать» в методе post. Может быть, графз делает что-то за сценой, потому что Грайль делает так много вещей, основанных на согласии, о которых вы, возможно, даже не знаете!

+1

Я понял, спасибо за ваш комментарий! Оказывается, когда отображаемый контент включает в себя атрибут, например: , где атрибут пуст, браузер снова запрашивает эту информацию. Поскольку объект существовал только в контексте первого вызова, второй звонок бомбил. Другими словами, это связано с попыткой отобразить некоторый XML на странице, которая была визуализирована. – Quad64Bit

Смежные вопросы