6

質問 -

私がテストした一部のアプリケーションでは、アクション送信から別のビュー/コントローラーへの呼び出しがあることに気付きましたが、そのページがレンダリングされると、次のように表示されません。

$コントローラ/$ページ

そうですか:

$コントローラー/インデックス

これは 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]
}

URL マッピング:

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 タグにアクション コールを追加すると、これら 2 つのボタンは正しいページに移動しますが、URI は $controller/$g:form_action になります。

g:form がラッパーとして必要な場合、actionSubmit のアクションの要点がわからないと思います。

4

1 に答える 1

4

はい、indexすべてのコントローラのデフォルト アクションです。したがって、指定しない場合は、コントローラーのページになります。

これについては、彼らのWeb サイトでさらに詳しく説明されています。つまり、ルールは次のとおりです。

  • アクションが 1 つしか存在しない場合、コントローラーのデフォルト URI はそのアクションにマップされます。
  • URI /book にアクションが指定されていない場合にリクエストを処理するアクションである index アクションを定義すると、
  • または、defaultAction プロパティを使用して明示的に設定することもできます。

    static defaultAction = "リスト"

于 2012-04-19T14:19:49.050 に答える