0

嗨,这是一个示例 urlmailBox/messageDetailsInbox/79如您所见,最后一个斜杠“79”之后有 ID 参数。“邮箱”是我的控制器,“messageDetailsInbox”是我的操作。我想在 url 中隐藏 ID 参数。我想像这样自定义网址mailBox/messageDetailsInbox

这是我的代码

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

5 回答 5

2

简而言之,如果您需要将数据(例如,您的 ID)传递给您的控制器/操作,并且您不想通过 URL 令牌或查询参数(即 HTTP GET 方法)来完成它

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

那么你需要做一个表格POST。但除非您要发送大量数据或敏感数据,否则通常最好使用 GET 方法,因为您的 URL 将更易于收藏。

于 2013-06-07T16:11:03.397 回答
1

因此,不要将此 ID 添加到链接中:

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

如果您仍想传递 Id,但不想在 URL 中具有,则可以将其作为参数传递:

<g:link action="messageDetailsInbox" params="${[id: i.id]}"> MyLink </g:link>
于 2013-06-07T08:26:19.283 回答
1

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

  1. 如果您在 URI 中没有任何唯一的东西来标识一个对象(idhash或其他东西),那么您不能只在浏览器中插入这个 url 并获取这个对象。因此,您可以通过将 ID 散列为b4eb2a176dc4baa110038a8a7f3c3562之类的字符串来隐藏 ID,并使用它代替 id(但您必须将其保存到数据库中以便快速搜索)。
  2. 或者,对于重定向,您可以将当前对象的 id 保存在flashsession中:

session.current_id = 1234

或者

flash.current_id = 1234

然后做类似的事情

def msg = YouDomain.get(flash.current_id)

于 2016-04-19T09:17:12.153 回答
0

UrlsMapping.groovy在文件config夹中的文件中定义一个新的 url

"mailBox/messageDetailsInbox"(controller: "controllerName", action: "messageDetailsInbox")

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

于 2013-06-07T09:49:33.133 回答
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>

于 2016-04-19T06:24:22.647 回答