问题 -
我注意到我测试的一些应用程序从动作提交中调用了另一个视图/控制器,但是当呈现该页面时,而不是看到:
$控制器/ $页
我明白了:
$控制器/索引
这是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的动作。
答案 0 :(得分:4)
是的,index
是所有控制器的默认操作。因此,如果您没有指定一个,那么您将登陆控制器的页面。
有关website的更详细讨论。即,规则是:
- 如果只有一个操作,则控制器的默认URI映射到 那个动作。
- 如果您定义了一个索引操作,那就是该操作 在URI / book
中未指定任何操作时处理请求或者,您可以使用defaultAction属性显式设置它:
static defaultAction =“list”