代码之家  ›  专栏  ›  技术社区  ›  Quad64Bit

Grails操作被调用两次。救命啊!

  •  2
  • Quad64Bit  · 技术社区  · 14 年前

    我正在写一个grails应用程序,遇到了一个奇怪的问题。当单击页面上的submit按钮时,关联的操作会被快速连续调用两次。这会让一切变得可怕。其他人以前见过这个问题吗?以下是我的代码:

    从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

    ****************************
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
    无效的


    2010-09-17 17 17:05:44100[http-8080-2]错误errors.grailExceptionResolver-空
    java.lang.NullPointerException

    1 回复  |  直到 14 年前
        1
  •  0
  •   Paras Adrian K    14 年前

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

    而不是

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

    方法名为save。在post方法上看到“Show”动作是很奇怪的。也许grails在幕后做了一些事情,因为grails做了很多你可能根本不知道的惯例!!