Grails动作被调用两次。救命!

时间:2010-09-17 21:16:20

标签: groovy gsp 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;
}

输出:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1994年9月17日星期六00:00:00 时间1284757543744
****************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!

时间1284757544091
****************************
2010-09-17 17:05:44,100 [http-8080-2] ERROR errors.GrailsExceptionResolver - null
显示java.lang.NullPointerException

您可以看到在第一次调用后几毫秒内调用了两次操作。系统失败,因为在第二次调用时,日期对象为空。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

你已经解决了这个问题吗?您是否尝试过将节目中的操作更改为保存?

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

而不是

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

和保存方法的名称。看到在post方法上看到“显示”动作是很奇怪的。也许grails正在幕后做事,因为Grails会根据您可能甚至不知道的惯例做很多事情!