0

カスタム ポートレットのいくつかにフレンドリー URL を正常に実装しましたが、正常に動作しています。

クリック可能なリンクが生成されると、わかりやすい URL が正しく表示されます。

ここで私の要件は、この render-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>

したがって、非友好的なURLが渡された場合のように、非友好的なURLを友好的なURLに変換できるユーティリティが必要ですString-それは上記の友好的な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>

そして、はい、JSPURL01の上に書かれています。URL02

4

1 に答える 1

0

タグ<portlet-url-class>でポートレットのURLを作成する際に使用するので、自作してもいいと思います。<portlet:renderURL>

では、エントリliferay-portlet.xmlを定義できます。<portlet-url-class>

のソース コードをチェックするとPortletResponseImpl.java、メソッドはそのポートレットcreateLiferayPortletURL()の をチェックします。PortletURLGenerationListener

これを作成して、必要に応じて URL を変更できると思います。

于 2013-03-01T18:13:20.500 に答える