如何将门户 URL 转换为其对应的友好 URL

Posted

技术标签:

【中文标题】如何将门户 URL 转换为其对应的友好 URL【英文标题】:How to convert a portal URL to its corresponding friendly URL 【发布时间】:2013-02-10 13:01:44 【问题描述】:

我已经成功地为我的几个自定义 portlet 实现了friendly-url,它工作正常。

生成可点击链接时,它会正确显示友好的网址。

现在我的要求是,我需要将此渲染 URL(例如 URL01)作为参数(param02)发送到另一个 URL(URL02),然后此 URL01 将显示在另一个页面。

URL01 是这样生成的:

<portlet:renderURL var="URL01" windowState="<%=WindowState.MAXIMIZED.toString() %>">
    <portlet:param name="redirect" value="<%= currentURL %>" />
    <portlet:param name="myId" value="<%= String.valueOf(myObject.getMyId()) %>" />
    <portlet:param name="title" value="<%= myObject.getTitle() %>" />
    <portlet:param name="name" value="<%= myObject.getName() %>" />
</portlet:renderURL>

URL02 就是这样生成的

<portlet:renderURL var="URL02" windowState="<%= LiferayWindowState.POP_UP.toString() %>">
    <portlet:param name="redirect" value="<%= currentURL %>" />
    <portlet:param name="URL01" value="<%=URL01 %>" />
    <portlet:param name="ownerId" value="<%= String.valueOf(ownerId) %>" />
    <portlet:param name="groupId" value="<%= String.valueOf(scopeGroupId) %>" />
</portlet:renderURL>

URL02 将打开一个弹出窗口,URL01 将在 JSP 中显示如下:

URL: <%= ParamUtil.getString(request, "URL01") %>

但这将URL01 (unfriendly-URL) 显示为:

URL: http://localhost:8080/web/guest/mypage?p_p_id=my_WAR_myportlet&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&_my_WAR_myportlet_myId=10989&_my_WAR_myportlet_title=This+is+miine&my_WAR_myportlet_name=What+name

如果这是一个可点击的链接,它会完美地生成为(友好的 URL):

<a href="http://localhost:8080/web/guest/mypage/-/mine/10989/This+is+miine/What+name/maximized"> Click me! </a>

所以我需要一个可以将我的 unfriendly-url 转换为friendly-URL 的实用程序,就像传递了 unfriendly-url 的 String 一样 - 它会将其转换为上面显示的friendly-url。

或者我必须创建自己的实现来实现这一点?

编辑:

<route>
    <pattern>/myId:\d+/title:.+/name:.+/p_p_state</pattern>        
    <ignored-parameter name="redirect" /> 
    <implicit-parameter name="p_p_id">my_WAR_myportlet</implicit-parameter>
    <implicit-parameter name="p_p_lifecycle">0</implicit-parameter>
    <implicit-parameter name="p_p_mode">view</implicit-parameter>
</route>

是的,URL01 写在 JSP 中的 URL02 上方。

【问题讨论】:

Prakash,URL01 是否高于 URL02?如果是这样,请尝试使用 &lt;liferay-portlet:renderURL /&gt; 而不是 &lt;portlet:renderURL /&gt; 您能否发布带有 URL 路由映射的文件? @brandizzi 已在问题中包含路由,@rp 是 URL01 高于 URL02。将尝试使用&lt;liferay-portlet:renderURL /&gt;,但您能详细说明它会产生什么不同吗? 【参考方案1】:

我认为您可以创建自己的&lt;portlet-url-class&gt;,当您创建带有&lt;portlet:renderURL&gt; 标记的portlet URL 时将使用它。

liferay-portlet.xml 中,您可以定义&lt;portlet-url-class&gt; 条目。

如果您检查PortletResponseImpl.java 的源代码,则createLiferayPortletURL() 方法会检查该portlet 的PortletURLGenerationListener

我认为,您可以创建一个 this 并根据需要修改 URL。

【讨论】:

以上是关于如何将门户 URL 转换为其对应的友好 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET 中将 base64 图像 URL 转换为用户友好 URL

如何将地图转换为 url 查询字符串?

如何使用 .htaccess 创建友好的 URL?

如何在不破坏图像、CSS 和 JavaScript 的情况下实现友好的 URL? [关闭]

Rails - 如何将生成的 URL 修复为友好的 URL

如何将相同内容的多个 URL 引用映射到一个 SEO 友好 URL?