2010-09-17 72 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; 
} 

輸出:

!!!!!! !!!!!!!!!!!!!!!!!!!!!!
Sat Sep 17 00:00:00 EDT 1994
時間1284757543744
****************************
!! !!!!!!!!!!!!!!!!!!!!!!!!!!
null
時間1284757544091
****************************
2010-09-17 17:05:44,100 [ HTTP-8080-2] ERROR errors.GrailsExceptionResolver - 空
顯示java.lang.NullPointerException

你可以看到第一次調用兩次後的幾毫秒的動作將被調用。系統失敗,因爲在第二次調用時,日期對象爲空。有任何想法嗎?謝謝!

回答

0

你已經解決了嗎?你有沒有嘗試改變從節目中的行動來保存?

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

代替

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

,並且該方法作爲保存的名稱。在post方法中看到「顯示」動作是很奇怪的。也許Grails在幕後做了一些事情,因爲Grails根據慣例做了很多事情,你甚至可能不知道!

+1

我想通了,謝謝你的評論!事實證明,當呈現的內容包含諸如屬性爲空的屬性時,瀏覽器會再次請求該信息。由於對象僅存在於第一次通話的情況下,所以第二次通話被轟炸。換句話說,它與嘗試將某個XML呈現給正在呈現的頁面有關。 – Quad64Bit 2010-09-29 20:13:10