2012-04-04 49 views
5

我想为我的JSR-268 Portlets启用liferay中的友好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> 

在portlet呈现的网址仍然是:​​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创建使用follogwing代码:

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

这将是非常好的,如果你可以点我到正确的方向...

回答

4

您的路线应与后contentcontent已经是生成的URL的一部分的部分开始。值为<friendly-url-mapping>content</friendly-url-mapping>用于此。

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

另外,一定要将DTD更改为您的*-url-routes.xml中最新的一个。

<!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映射在两方面都起作用:内容中的网址已经被渲染为友好的网址......对吗? 也可以有一个instanceid/instanceable的问题? – csupnig 2012-04-04 14:54:36

+0

昨天我开始探索友好的网站时,我有这个疑问。经过很多调试后,结果如此。我添加了一个通用的'/'来让它工作。尝试'instanceable = false'来排除'instanceid'问题。 – adarshr 2012-04-04 14:55:35

+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,但仍然在contentid参数中获得INSTANCE_R2 ... :/我可能只需要玩一下。 – csupnig 2012-04-04 15:02:24

3

从Adarshr继已经回答了你也可以摆脱/的 - /部分通过创建自己的类,它扩展DefaultFriendlyURLMapper和覆盖方法 isCheckMappingWithPrefix等你拿:

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

所以你的网址将只是http://community_name.com/web/group_name/page_name/content/contentId。然后,你在friendly-url-mapper-class标签中设置你的类。你可以看到在GitHub上此portlet项目的例子:

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

~~编辑~~

感谢为普拉卡什指出,旧的链接没有工作。

+1

非常感谢您链接文章...我会看看它:) – csupnig 2012-04-05 07:34:30

+0

不用担心! :)让我知道如果您有任何问题或建议,以改善它! – Jonny 2012-04-05 07:36:52

+1

真棒小费!我可能会在我的项目中使用它。 – adarshr 2012-04-05 07:58:59

0

我实现用

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

生命周期,状态和模式从URL中消失,除去除了p_auth和我javax.portlet.action所有PARAMS。但没有办法删除p_auth和URL的其余部分: