如何添加 URL 参数但在 POST - Spring MVC 中隐藏其他参数



我正在尝试在Spring MVC应用程序中添加URL参数。 这是一个显示结果的基本搜索页面。

在搜索页面中,有一个设置为POST的表单。 URL中有许多隐藏字段和其他我不想要的字段。所以,我不想做一个GET。

我确实想要 URL 中的搜索查询。 因此,单击搜索按钮后,生成的搜索结果页面需要具有类似 /search?query=hello 的 URL

为了使它工作,我在Spring MVC控制器中创建了一个RequestMapping方法并进行重定向:跟踪查询参数。 但是,我不确定使用重定向是最佳答案,似乎重定向也可能存在性能问题。

我环顾四周,注意到人们使用 javascript 和位置对象,但设置位置对象显然会重新启动您设置它的 URL。 我还查看了HTTPServletResponse和HTTPServletRequest对象,但找不到太多内容。

关于如何强制将搜索参数添加到 URL 的任何想法?

您的表单将指定一个"操作",告诉它要 POST 到哪里。我本以为您可以将 onclick 事件附加到您的提交按钮(或将 onsubmit 事件附加到您的表单),该事件通过附加"?query="来更新操作 URL。

document.<form name>.action += "?query=...";

然后,您只需要担心有人在未启用JavaScript的情况下发布您的表单 - 在这种情况下,您可以回退到重定向。

我不知道服务器技术如何,所以我不能说它是否愿意同时为您提供 GET 和 POST 参数,如果没有,您将不得不手动将 GET 从 URL 中删除。

但无论如何,这似乎是一个相当奇怪的情况 - 在 URL 中显示参数真的有那么大吗?通过HTML表单发布的任何内容仍然可以使用正确的工具进行检查,只是稍微困难一些。

我想用代码为我的问题提供一个更完整的答案。以前的用户帮助我走上了这条路,所以我会将其保留为可接受的答案。 但是,有一点需要注意:

如果您添加到操作中,并且您有一个同名的输入文本框,则页面会发布一个重复的值,例如:query=hello,hello。

因此,我需要删除输入框中的名称,并使用以下javascript。 请注意,我使用的是原型.js框架:

Event.observe(window, 'load', function(event) {
Event.observe('searchForm', 'submit', function(event) {     
    $('searchForm').action += "?query="+$('searchBox').value;
});

最新更新