Liferay 友好的 URL 参数丢失

Posted

技术标签:

【中文标题】Liferay 友好的 URL 参数丢失【英文标题】:Liferay friendly URL parameters lost 【发布时间】:2015-01-06 21:44:56 【问题描述】:

我在friendly-url-routes.xml 中使用<ignored-parameter> 标签来隐藏requets 参数。 Liferay documentation 说“忽略的参数不会影响 URL 识别”。当我重定向到 Struts 操作时,我的参数会丢失并被忽略。

来自我的friendly-url-routes.xml 的片段

<route>
    <pattern>/showSearch</pattern>
    <ignored-parameter name="searchId"/>
    <ignored-parameter name="pageNumber"/>
    <ignored-parameter name="count"/>
</route>

这是在struts.xml中

<action name="showSearch" method="showSearch" class="com.mycomp.portlet.action.search.SearchAction">
        <result name="success">
            <param name="location">/WEB-INF/jsp/results/detail.jsp</param>
            <param name="searchId">$searchId</param>
            <param name="pageNumber">$pageNumber</param>
            <param name="count">$count</param>
        </result>
</action>

标签怎么可能在不应该影响操作的功能的情况下影响操作的功能?我能做些什么来隐藏这些参数但保留功能吗?我不能使用&lt;generated-parameter&gt; 标签,因为这些参数并不总是有值

谢谢

【问题讨论】:

Struts2 使用自己的方案进行 URL 识别。最重要的参数是动作名称和命名空间。动作名称后面的其他参数并不重要,因此可以忽略。 问题是如果我忽略它们,那么复选框不会保持选中状态,文本输入不会保留它们的文本等...我正在通过一些操作进行重定向,所以它可能会干扰其中一个在某处生成的网址 那么你应该将它们添加到一个模式中。 你的意思是在“?”之前在网址中?这是一个使用大约 40 个参数提交的搜索,所以我试图根本不显示它们。 IE 最多只能支持超过 2000 个字符的 url。此外,只有当参数具有某些值时,它才会起作用。就我而言,它们有时是空的。 (当用户没有在搜索栏中输入任何内容时) 你为什么要通过 url 传递它们? 【参考方案1】:

我不知道 Liferay,但如果您要求忽略一个参数,该参数将被忽略(阅读:从 URL 中删除)似乎是合乎逻辑的。

The same documentation you linked,在上一句中表示:

ignored-parameter 元素指定了一个应该被忽略的参数并且不包含在生成的 URL 中

之后,不清楚你想要达到什么目标。

如果你想处理 GET 请求,QueryString 中的参数需要保留在那里(但你可以用@987654322 将它们格式化为Pretty URLs / Clean URLs @)。否则你就是violating HTTP 1.1 (GET with body)。

也根本不需要将这些参数放在 Struts 配置中...

除非您的结果是 redirect / redirectAction 类型,否则参数将在两个请求中丢失。在这种情况下,您可以(在redirectAction 中)以代码中使用的方式静态复制参数,或者(在redirect 中)仅动态复制该请求的现有参数,而无需知道它们并且很难- 将它们编码到配置中,with this trick。

【讨论】:

您对 Struts 配置中的参数是正确的。它实际上是一个重定向操作,当我在这里复制它时,我刚刚更改了它。我已经将参数隐藏在另一个带有 标签的 portlet 中,但它在这个 portlet 中不起作用,我不知道为什么 只使用getter和setter,redirectAction中的所有参数,即使是空的

以上是关于Liferay 友好的 URL 参数丢失的主要内容,如果未能解决你的问题,请参考以下文章

如何在liferay中制作友好的网址

Liferay 相同的操作和渲染方法的友好 url

省略 Liferay 友好 URL 中的减号“-”

liferay 6.1 中的友好 URL

如何在 Liferay 门户中实现友好 URL

如何在 PrettyFaces 的帮助下将长的 Liferay URL 映射到友好的 URL?