2012-04-04 69 views
5

Tôi muốn bật url thân thiện trong suốt đời cho các Cổng JSR-268 của tôi.Nhận các url thân thiện để làm việc trong Liferay

Tôi đã định cấu hình trình lập bản đồ url thân thiện như tôi đã nói trong http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/FriendlyURLMapper nhưng bằng cách nào đó điều này không hiệu quả đối với tôi.

Tôi đang thiếu gì?

liferay-portlet.xml của tôi trông như thế này:

<?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 của tôi trông như thế này:

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

Các url render trong portlet vẫn là: 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 được tạo ra sử dụng mã follogwing:

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

Nó sẽ rất tốt đẹp nếu bạn có thể chỉ cho tôi vào đúng hướng ...

Trả lời

4

Tuyến đường của bạn nên bắt đầu với phần sau content như content đã là một phần của URL được tạo ra. Giá trị <friendly-url-mapping>content</friendly-url-mapping> được sử dụng cho điều đó.

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

Ngoài ra, hãy đảm bảo thay đổi DTD thành phiên bản mới nhất trong số *-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

Tôi vừa thử điều đó ... nhưng nó vẫn không hoạt động. Tôi cho rằng ánh xạ url đang hoạt động theo cả hai cách: các url trong nội dung shoul đã được hiển thị dưới dạng url thân thiện ... phải không? Ngoài ra, có thể có sự cố với cá thể/thể hiện không? – csupnig

+0

Tôi đã có nghi ngờ chính xác này khi tôi bắt đầu khám phá các url thân thiện ngày hôm qua. Sau khi gỡ lỗi rất nhiều, hóa ra nó. Tôi đã thêm một '/' chung để làm cho nó hoạt động. Hãy thử với 'instanceable = false' để loại trừ các vấn đề' instanceid'. – adarshr

+0

Cảm ơn ... số / chung ít nhất đã thay đổi điều gì đó. Bây giờ URL của tôi trông giống như http: // localhost: 8080/web/guest/home/-/content /? P_auth = Yu81QQrj & p_p_lifecycle = 1 & _content_WAR_genticsportlet_INSTANCE_R2HSaoL5RkHi_contentid = 10007.34 Tôi cũng đặt có thể lập trình thành false nhưng tôi vẫn nhận được INSTANCE_R2 ... trong tham số contentid :/Có lẽ tôi chỉ phải chơi một chút thôi. – csupnig

3

Tiếp theo từ Adarshr đã trả lời bạn cũng có thể thoát khỏi/-/phần bằng cách tạo lớp của riêng bạn mà kéo dài DefaultFriendlyURLMapper và ghi đè phương pháp isCheckMappingWithPrefix để bạn có được:

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

Vì vậy, các URL của bạn sẽ chỉ là http://community_name.com/web/group_name/page_name/content/contentId. Sau đó, bạn đặt lớp của bạn trong các thẻ lớp thân thiện-url-mapper. Mà bạn có thể xem ví dụ về dự án portlet này trên GitHub:

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

~~ EDIT ~~

Cảm ơn Prakash đã chỉ ra rằng các liên kết cũ đã không làm việc.

+1

cảm ơn bạn rất nhiều vì đã liên kết bài viết ... Tôi sẽ xem xét nó :) – csupnig

+0

Đừng lo! :) cho tôi biết nếu bạn có bất kỳ câu hỏi hoặc gợi ý nào để cải thiện nó! – Jonny

+1

Mẹo tuyệt vời! Tôi có lẽ sẽ sử dụng điều này trong dự án của tôi. – adarshr

0

tôi đã đạt được để loại bỏ tất cả các params trừ p_auth và javax.portlet.action của tôi bằng cách sử dụng

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

vòng đời, nhà nước và chế độ biến mất khỏi url. Nhưng không có cách nào để xóa p_auth và phần còn lại của URL:

Các vấn đề liên quan