2012-04-04 86 views
5

Quería habilitar las URL amigas en liferay para mis portlets JSR-268.Obtenga direcciones URL amigables para trabajar en Liferay

Configuré el amigable url mapper como me dijeron en http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/FriendlyURLMapper pero de alguna manera esto no me funciona.

¿Qué me estoy perdiendo?

Mi liferay-portlet.xml se parece a esto:

<?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> 

Mi content-url-routes.xml se parece a esto:

<?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> 

las direcciones URL que se presten en el portlet sigue siendo: 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

La URL se creó utilizando el código follogwing:

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

Sería muy bueno si me podría apuntar en la dirección correcta ...

Respuesta

4

La ruta debe comenzar con la parte después de content como content ya es parte de la URL generada. El valor <friendly-url-mapping>content</friendly-url-mapping> se usa para eso.

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

También, asegúrese de cambiar el DTD a la última uno en su *-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

Lo intenté ... pero todavía no funciona. Supongo que el mapeo de url está funcionando de dos maneras: las URL en el contenido ya deberían ser renderizadas como URLs amigables ... ¿verdad? ¿También podría haber un problema con el archivo de instancia/instanciable? – csupnig

+0

Tenía esta duda exacta cuando comencé a explorar las URL amigas ayer. Después de mucha depuración, resulta que sí. Agregué un '/' genérico para hacerlo funcionar. Pruebe con 'instanceable = false' para descartar problemas de' instanceid'. – adarshr

+0

Gracias ... el genérico / al menos cambió algo. Ahora mi URL se ve como http: // localhost: 8080/web/guest/home/-/content /? P_auth = Yu81QQrj & p_p_lifecycle = 1 & _content_WAR_genticsportlet_INSTANCE_R2HSaoL5RkHi_contentid = 10007.34 También configuré como instanciable en falso, pero sigo obteniendo el INSTANCE_R2 ... en el parámetro contentid :/Probablemente solo tenga que jugar un poco. – csupnig

3

raíz de Adarshr ha respondido también puede deshacerse de la/-/parte por la creación de su propia clase que se extiende DefaultFriendlyURLMapper y reemplaza el método isCheckMappingWithPrefix por lo que se obtiene:

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

Así sus URL serían solo http://community_name.com/web/group_name/page_name/content/contentId. Luego configuras tu clase en las etiquetas friendly-url-mapper-class. Que se puede ver un ejemplo de este proyecto en el portlet en GitHub:

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

~~ ~~ EDITAR

Gracias Prakash por señalar que el antiguo enlace no funcionaba.

+1

muchas gracias por vincular el artículo ... Voy a echarle un vistazo :) – csupnig

+0

¡No se preocupe! :) ¡Avíseme si tiene alguna pregunta o sugerencia para mejorarla! – Jonny

+1

Awesome tip! Probablemente usaré esto en mi proyecto. – adarshr

0

he conseguido para eliminar todos los parametros, excepto el p_auth y mi javax.portlet.action utilizando

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

ciclo de vida, el estado y el modo desaparecen de la URL. Pero no hay manera de eliminar el p_auth y el resto de la URL:

Cuestiones relacionadas