如何将门户 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?如果是这样,请尝试使用<liferay-portlet:renderURL />
而不是 <portlet:renderURL />
您能否发布带有 URL 路由映射的文件?
@brandizzi 已在问题中包含路由,@rp 是 URL01 高于 URL02。将尝试使用<liferay-portlet:renderURL />
,但您能详细说明它会产生什么不同吗?
【参考方案1】:
我认为您可以创建自己的<portlet-url-class>
,当您创建带有<portlet:renderURL>
标记的portlet URL 时将使用它。
在liferay-portlet.xml
中,您可以定义<portlet-url-class>
条目。
如果您检查PortletResponseImpl.java
的源代码,则createLiferayPortletURL()
方法会检查该portlet 的PortletURLGenerationListener
。
我认为,您可以创建一个 this 并根据需要修改 URL。
【讨论】:
以上是关于如何将门户 URL 转换为其对应的友好 URL的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET 中将 base64 图像 URL 转换为用户友好 URL