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>
标签怎么可能在不应该影响操作的功能的情况下影响操作的功能?我能做些什么来隐藏这些参数但保留功能吗?我不能使用<generated-parameter>
标签,因为这些参数并不总是有值
谢谢
【问题讨论】:
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 配置中的参数是正确的。它实际上是一个重定向操作,当我在这里复制它时,我刚刚更改了它。我已经将参数隐藏在另一个带有以上是关于Liferay 友好的 URL 参数丢失的主要内容,如果未能解决你的问题,请参考以下文章