2012-04-04 17 views
5

私はJSR-268ポートレットのライフラインでフレンドリーなURLを有効にしたかったのです。フレンドリーなURLをLiferayで利用する

フレンドリーなURLマッパーはhttp://www.liferay.com/web/guest/community/wiki/-/wiki/Main/FriendlyURLMapperに記載されているように設定しましたが、どういうわけかこれは私のためには機能しません。

私には何が欠けていますか?

マイliferay-portlet.xmlは次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.1.0//EN"  "http://www.liferay.com/dtd/liferay-portlet-app_6_1_0.dtd"> 
<liferay-portlet-app> 
<portlet> 
    <portlet-name>content</portlet-name> 
    <friendly-url-mapper-class>com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper</friendly-url-mapper-class> 
    <friendly-url-mapping>content</friendly-url-mapping> 
    <friendly-url-routes>com/gentics/cr/portlet/content-url-routes.xml</friendly-url-routes> 
    <instanceable>true</instanceable> 
</portlet> 
<portlet> 
    <portlet-name>navigation</portlet-name> 
    <icon>/icon.png</icon> 
    <instanceable>true</instanceable> 
</portlet> 
<portlet> 
    <portlet-name>search</portlet-name> 
    <icon>/icon.png</icon> 
    <instanceable>true</instanceable> 
    <!-- header-portlet-css>/css/test.css</header-portlet-css> 
    <footer-portlet-javascript>/js/test.js</footer-portlet-javascript--> 
</portlet> 
<!--role-mapper> 
    <role-name>administrator</role-name> 
    <role-link>Administrator</role-link> 
</role-mapper> 
<role-mapper> 
    <role-name>guest</role-name> 
    <role-link>Guest</role-link> 
</role-mapper> 
<role-mapper> 
    <role-name>power-user</role-name> 
    <role-link>Power User</role-link> 
</role-mapper> 
<role-mapper> 
    <role-name>user</role-name> 
    <role-link>User</role-link> 
</role-mapper--> 
</liferay-portlet-app> 

マイcontent-url-routes.xmlは次のようになります。

<?xml version="1.0"?> 
<!DOCTYPE routes PUBLIC "-//Liferay//DTD Friendly URL Routes 6.0.0//EN" "http://www.liferay.com/dtd/liferay-friendly-url-routes_6_0_0.dtd"> 

<routes> 
<route> 
    <pattern>/content/{contentid}</pattern> 
</route> 
<!-- route> 
    <pattern>/{instanceId}/search/{filter}</pattern> 
    <implicit-parameter name="do">search</implicit-parameter> 
</route> 
<route> 
    <pattern>/{instanceId}/search/{filter}/{start}</pattern> 
    <implicit-parameter name="do">search</implicit-parameter> 
</route--> 
</routes> 

ポートレットにレンダリングされたURLはまだです:http://localhost:8080/web/guest/home?p_auth=Yu81QQrj&p_p_id=content_WAR_genticsportlet_INSTANCE_R2HSaoL5RkHi&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-2&p_p_col_count=1&_content_WAR_genticsportlet_INSTANCE_R2HSaoL5RkHi_contentid=10007.33

URLが作成されました次のコードを使用してください:

PortletURL actionURL = response.createActionURL(); 
actionURL.setParameter("contentid", "10007.33"); 

あなたは正しい方向に私を指すことができれば、それは非常にいいだろう ...

答えて

4

あなたのルートがすでに生成されたURLの一部であるcontentcontentとしての後の部分で開始する必要があります。値は<friendly-url-mapping>content</friendly-url-mapping>です。

<route> 
    <pattern>/{contentid}</pattern> 
</route> 

また、あなたの*-url-routes.xmlの最新のものにDTDを変更してください。だから、

@Override 
public boolean isCheckMappingWithPrefix() {  
    return false; 
} 

:あなたが得るよう isCheckMappingWithPrefixをDefaultFriendlyURLMapperを拡張し、メソッドをオーバーライドする独自のクラスを作成することによって、/パート - Adarshrに続き

<!DOCTYPE routes PUBLIC "-//Liferay//DTD Friendly URL Routes 6.1.0//EN" "http://www.liferay.com/dtd/liferay-friendly-url-routes_6_1_0.dtd"> 
+0

私はちょうどそれを試みました...それでも動作しません。私は、urlマッピングが両方の方法で動作していると仮定します。コンテンツのURLはすでにフレンドリーなURLとしてレンダリングされています...そうですか? instanceid/instanceableにも問題がありますか? – csupnig

+0

私は昨日フレンドリーなURLを探索し始めたとき、私はこの疑いを持っていました。多くのデバッグの後、それは分かります。私は一般的な '/'を追加して動作させました。 'instanceid'問題を除外するために' instanceable = false'を試してください。 – adarshr

+0

ありがとう...一般/少なくとも何かを変更しました。今私のURLはhttp:// localhost:8080/web/guest/home/-/content /?p_auth = Yu81QQrj&p_p_lifecycle = 1&_content_WAR_genticsportlet_INSTANCE_R2HSaoL5RkHi_contentid = 10007.34のように見えますが、instanceableをfalseに設定しましたが、INSTANCE_R2 ...をcontentidパラメータ:/私はおそらくちょっと周りを遊ばなければならない。 – csupnig

3

はあなたにも/を取り除くことができます答えていますURLはhttp://community_name.com/web/group_name/page_name/content/contentIdとなります。次に、friendly-url-mapper-classタグでクラスを設定します。あなたはGitHubの上でこのポートレット・プロジェクトでの例を見ることができる。

https://github.com/DevJonny/Liferay-6-Friendlier-Friendly-URL-Mapper

~~ EDIT ~~

おかげプラカシュ古いリンクが機能しなかったことを指摘し。

+1

記事をリンクしてくれてありがとう...私はそれを見てみましょう:) – csupnig

+0

心配しないで! :)それを改善するためのご質問やご提案がありましたら教えてください! – Jonny

+1

素晴らしいチップ!私はおそらく私のプロジェクトでこれを使用します。 – adarshr

0

私は、ライフサイクル、状態とモードがURLから消え

<pattern>/myportlet</pattern> 
<ignored-parameter name="p_p_lifecycle" /> 
<ignored-parameter name="p_p_state" /> 
<ignored-parameter name="p_p_mode" /> 

を使用してp_authと私のjavax.portlet.action以外のすべてのparamsを削除するために達成しました。しかし、p_authとURLの残りの部分を削除する方法はありません:

関連する問題