Grails隐藏URL中的ID参数

时间:2013-06-07 08:19:47

标签: grails

嗨,这是一个示例网址mailBox/messageDetailsInbox/79正如您所看到的,在最后一个斜杠“79”后面有ID参数。 “mailbox”是我的控制器,“messageDetailsInbox”是我的动作。我想在url中隐藏ID参数。我想要像mailBox/messageDetailsInbox

这样的自定义网址

这是我的代码

<g:link action="messageDetailsInbox"   id="${i.id}"> MyLink </g:link>

5 个答案:

答案 0 :(得分:2)

简单地说,如果您需要将数据(例如您的ID)传递给您的控制器/操作,而您不想通过URL令牌或查询参数(即HTTP GET方法)来执行此操作

//GET method
http://server/controller/action/79        //token
http://server/controller/action?id=79     //query param

然后你需要做一个表格POST。但是,除非您发送大量数据或敏感数据,否则通常最好使用GET方法,因为您的网址更具书签功能。

答案 1 :(得分:1)

因此,请勿将此ID添加到链接中:

<g:link action="messageDetailsInbox"> MyLink </g:link>

如果您仍想传递ID,但又不想使用网址,则可以将其作为参数传递:

<g:link action="messageDetailsInbox" params="${[id: i.id]}"> MyLink </g:link>

答案 2 :(得分:1)

我不确定你的意思,但是:

  1. 如果您在URI中没有任何唯一标识对象( id 哈希或其他内容),那么您就不能在浏览器中插入此URL并获取此对象。因此,您可以通过将其隐藏到 b4eb2a176dc4baa110038a8a7f3c3562 之类的字符串来隐藏ID,并使用它而不是id(但您必须将其保存到数据库中以便快速搜索)。
  2. 或者,对于重定向,您可以在 flash 会话中保存当前对象的ID:
  3.   

    session.current_id = 1234

      

    flash.current_id = 1234

    然后执行类似

    的操作
      

    def msg = YouDomain.get(flash.current_id)

答案 3 :(得分:0)

UrlsMapping.groovy文件夹

中的config文件中定义新网址
"mailBox/messageDetailsInbox"(controller: "controllerName", action: "messageDetailsInbox")

然后在post中传递参数。这将解决您的问题。

答案 4 :(得分:0)

  1. 使用 <g:form controller="SomeController" action="SomeAction" method="POST"> <g:hiddenField name="id" value="${your?.id}"/> <input type="submit" class="text-button" value="submit"/> </g:form>

  2. 并在同一个.gsp中在head部分添加以下css <style type="text/css"> .text-button { background-color: Transparent;
    text-decoration: underline;
    color: blue; cursor: pointer; border:0 }
    </style>