如何从grails中的控制器创建canocical?

时间:2011-02-24 13:13:36

标签: grails

在grails中,我有一个像/ myapp / questions / all

这样的链接

all是传递给我的控制器的参数(全部,回复,......)。

我有一个表单可以根据类型搜索问题:总而言之,在回复中,... 在搜索表单中,我有一个隐藏字段来传递参数。

但显示的网址是/ myapp / questions / ans not / myapp / questions / all

所以我尝试了url:url =“[action:'question',controller:'mycontroller',params:['monparam':'$ {mavariable}']]”

但它不起作用。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:1)

你可以这样做:

class UrlMappings {

    static mappings = {
        name nameOfTheMapping: "/question/$para/" {
            controller = "mycontroller"
            action = "question"
        }
    ...

然后您可以通过以下方式访问映射:

<a href='${createLink(mapping: 'nameOfTheMapping', params: [para: para.encodeAsUrl()])}' title='test'>Test</a>

上面的代码是在我的taglib中创建的,所以如果你想在视图中使用它,它可能会有所不同。

答案 1 :(得分:0)

我不完全理解你的问题,但似乎你没有遵循grails惯例。网址的格式为

/app/controller/action

所以grails将你的url的'all'部分解释为在问题控制器上调用的动作(我从你的'myapp / questions / all'链接中得到的)。

我对你的网址规范感到困惑。

 url="[action:'question', controller:'mycontroller', params:['monparam':'${mavariable}']]"

基于此,你应该有一个名为'mycontroller'的控制器,上面有一个名为'question'的动作。您将在浏览器中看到的网址是

  

/应用/ myController的/问题monparam:任何

有关控制器的详细信息,请参阅here

答案 2 :(得分:0)

您需要编辑grails-app/conf/UrlMappings.groovy并创建一个省略操作的控制器映射。 (因为你在一个动作中处理这一切)

类似

"/questions/$question_type" (controller: 'questions', action: 'your_action')

其中“your_action”是处理这些请求的操作的名称。

然后在QuestionsController.groovy

def your_action = {
    // use question_type as needed
    def questions = Questions.findByQuestionType(params.question_type)
    // etc.
}

您可以执行各种操作来影响网址与请求的映射,请查看UrlMapping section in the Grails User Guide.