【问题标题】:How can I add a URL parameter but hide others in a POST - Spring MVC如何添加 URL 参数但在 POST 中隐藏其他参数 - Spring MVC
【发布时间】:2011-05-13 17:44:31
【问题描述】:

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

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

我确实想要 URL 中的搜索查询。所以点击搜索按钮后,生成的搜索结果页面需要有一个类似/search?query=hello

的URL

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

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

对如何强制将搜索参数添加到 URL 有什么想法吗?

【问题讨论】:

    标签: spring url spring-mvc parameters controller


    【解决方案1】:

    您的表单将指定一个“操作”,告诉它在哪里发布。我原以为您可以将 onclick 事件附加到您的提交按钮(或 onsubmit 事件到您的表单),通过将“?query =”附加到它来更新操作 url。

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

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

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

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

    【讨论】:

    • 感谢您的回复。我希望在控制器逻辑中执行此操作,但我认为您的解决方案可能是最好的方法。没有技术原因我需要 URL 中的查询参数,它纯粹是可视化的,因此人们可以看到他们可以通过简单地将查询参数传递给这个 URL 来轻松地与这个应用程序集成。
    【解决方案2】:

    我想用代码为我的问题提供更完整的答案。以前的用户帮助我走上了这条路,所以我会把它作为公认的答案。但是,有一点需要注意:

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

    所以,我需要删除输入框中的名称,并使用以下 javascript。注意,我使用的是prototype.js 框架:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 2020-10-24
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多