2012-04-19 42 views
6

问题 -的Grails - URL映射/默认操作和流动

我注意到,一些应用程序我测试有另一种观点认为,从动作控制器提交,但是当该页面呈现的/,而不是看到来电:

$控制器/ $页

我看到:

$控制器/指数

这是与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> 

所以默认情况下,形式重定向动作$控制器/索引。如果您在g:form标签中添加一个动作调用,那么这两个按钮将直接指向正确的页面,但是现在URI将变为$ controller/$ g:form_action。

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

+0

http://jira.grails.org/browse/GRAILS-3086 – user82302124 2012-04-19 15:05:17

回答

4

是的,index是所有控制器的默认操作。所以如果你没有指定一个,那就是你将登陆控制器的页面。

对它们的website进行更详细的讨论。即,规则是:

  • 如果只有一个动作是本默认URI用于控制器映射到 该动作。
  • 如果你定义一个索引作用,这是当在URI /本书中没有指定动作
  • 或者你可以用DefaultAction属性已明确将其设置 处理请求的操作:

    静态defaultAction的=“列表”

+0

感谢您的回答。问题虽然 - 使用actionSubmit从一个视图调用去控制器中具有cooresponding视图(命名为相同的事情)的方法。为什么URI转到$ controller/index而不是$ controller/method? – user82302124 2012-04-19 14:24:25

+0

嗯,不确定。你能发布任何与你的行动有关的代码吗? – Igor 2012-04-19 14:30:12

+0

添加片段。统计信息页面呈现正确。只是不是URI。 – user82302124 2012-04-19 14:40:57