在提交表单后但在Grails中呈现视图时更改URL

在提交表单后但在Grails中呈现视图时更改URL,url,search,grails,mapping,render,Url,Search,Grails,Mapping,Render,大家好,Grails社区,无论您在哪里!我面临一个很酷的问题。。。甚至是想法。我需要一些帮助 我想做的是: 提交带有短语的搜索表单。让我们说“裤子”。 值提交到/search/list searchController=>list方法 调用finder返回不同商店a、b、c和不同类别aaa、bbb、ccc的裤子列表。 默认情况下/search/list是呈现的URL,我可以在其中显示列表,但不是。。。 myapp.com/search/list?search=裤子 我想在浏览器中这样显示URL

大家好,Grails社区,无论您在哪里!我面临一个很酷的问题。。。甚至是想法。我需要一些帮助

我想做的是:

提交带有短语的搜索表单。让我们说“裤子”。 值提交到/search/list searchController=>list方法 调用finder返回不同商店a、b、c和不同类别aaa、bbb、ccc的裤子列表。 默认情况下/search/list是呈现的URL,我可以在其中显示列表,但不是。。。 myapp.com/search/list?search=裤子

我想在浏览器中这样显示URL

myapp.com/a-b-c/aaa-bbb-ccc?搜索=裤子

不使用urlMapping重定向,从而再次调用list方法

当然,在没有提交搜索表单的情况下,相同类型的URL会给出相同的裤子列表,只是我会在开始商店=[a,b,c],类别=[aaa,bbb,ccc]和搜索短语裤子中有更多的标准

我希望我的声音足够清晰。开箱思考


另外,也许你知道一些用Ruby、Java或PHP来处理这种情况的解决方案?

好吧,你可以使用urlmappings来解决这个问题

"/$shops/$categories/$search" {
 controller = "search"
 action = "list"
 constraints {
      shops(matches:/\w-\w-\w/)
      categories(matches:/\w+-\w+-\w+/)
 }
}
如果我的正则表达式匹配正确,那么 是否匹配myapp.com/a-b-c/aaa-bbb-ccc?搜索=裤子和裤子 将匹配myapp.com/a-b-c/aaa-bbb-ccc/pants

我认为还可以在urlmappings中添加一些预处理,例如

"/$shops/$categories/$search" {
  ...
  shops = shops.split('-')
  categories = categories.split('-') 
  ...
}

然而,我对此不是100%肯定。

重点是,当我提交搜索表单时,我唯一的变量是在params中搜索短语“pants”。下一步是对包含商店和类别的列表进行细化。有了这一点,我可以使用您提到的split来准备两个字符串,即“a-b-c”用于商店,而“aaa-bbb-ccc”用于类别。现在是棘手的部分,因为我想显示url,它是基于我刚刚在search controller中调用list方法得到的变量的,没有重定向,因此重新搜索,从url商店获得额外的参数=>['a','b','c',Category=>['aaa','bbb','ccc']。顺便说一句,我试着创建一个简单的中介,它可以重定向到真正的搜索引擎。您有一个操作搜索,它除了重定向到/$shops/$categories/$search并使用正确的参数外,不做任何其他事情。不要过度设计。