Grails - URL映射/默认操作和流程

时间:2012-04-19 14:10:54

标签: grails

问题 -

我注意到我测试的一些应用程序从动作提交中调用了另一个视图/控制器,但是当呈现该页面时,而不是看到:

$控制器/ $页

我明白了:

$控制器/索引

这是URL映射配置的问题吗?默认动作?只是好奇,因为它似乎是URI映射到默认值而不是实际操作。

查看代码:

<table>
..
<g:actionSubmit class="stats" action="stats" value="View Stats"/>
..
</table

控制器:

def stats() {

    def teamId = Team.get(params.id)
    def allPlayers = Player.withCriteria {
            eq('team', teamId)
            and {
                eq('isActive', true)
            }
    }
    [allPlayers:allPlayers, teamId:params.id]
}

urlMapping中:

class UrlMappings {

static mappings = {
    "/$controller/$action?/$id?"{
        constraints {
            // apply constraints here
    }
}
}

修改

我实际上弄清楚它是什么。这让我更加困惑。

grails actionSubmit有一个绑定它的动作。那个表格只是一个普通的形式,没有电话:

<g:form>
<g:actionSubmit class="stats" action="stats" value="View Stats"/>
<g:actionSubmit class="schedule" action="schedule" value="View Schedule"/>
<g:form>

因此,默认情况下,表单会将操作重定向到$ controller / index。如果你在g:form标签中添加一个动作调用,这两个按钮将指向正确的页面,但URI现在将是$ controller / $ g:form_action。

如果需要g:form作为包装器,我想我不明白actionSubmit的动作。

1 个答案:

答案 0 :(得分:4)

是的,index是所有控制器的默认操作。因此,如果您没有指定一个,那么您将登陆控制器的页面。

有关website的更详细讨论。即,规则是:

  
      
  • 如果只有一个操作,则控制器的默认URI映射到   那个动作。
  •   
  • 如果您定义了一个索引操作,那就是该操作   在URI / book
  • 中未指定任何操作时处理请求   
  • 或者,您可以使用defaultAction属性显式设置它:

         

    static defaultAction =“list”

  •