2012-03-26 4 views
0

Я попытался расширить BaseFriendlyURLMapper под Liferay5.2 - сервер приложений Jboss4.2 ... Нет проблемы с методом buildPath(), но я не могу понять, когда populateParams() срабатывает ... даже не в режиме отладкиLiferay 5.2: расширение BaseFriendlyURLMapper, populateParams() метод не запускается

это мой liferay-portlet.xml

<portlet> 
    <portlet-name>bookingInterface</portlet-name> 
    <configuration-action-class>my.package.MyConfiguration 
    </configuration-action-class> 

    <!-- --> 

    <instanceable>false</instanceable> 

    <private-request-attributes>false</private-request-attributes> 
    <private-session-attributes>false</private-session-attributes> 
    <friendly-url-mapper-class> 
     my.package.MyFriendlyURLMapper 
    </friendly-url-mapper-class> 
    <use-default-template>true</use-default-template> 
    <restore-current-view>true</restore-current-view> 
</portlet> 

это MyFriendlyURLMapper.java

public class MyFriendlyURLMapper extends BaseFriendlyURLMapper{ 

private static final String _PORTLET_ID="myPortlet_WAR_myPortlet"; 
private static final String _PORTLET_MAPPING = "myPortlet"; 
private static final String _LIFECYCLE_RENDER = "0"; 
private static final String _LIFECYCLE_ACTION = "1"; 
private static final String _LIFECYCLE_RESOURCE = "2"; 

public String getPortletId() { 
    return _PORTLET_ID; 
} 
public String getMapping() { 
    return _PORTLET_MAPPING; 
} 

public String buildPath(LiferayPortletURL portletURL) { 
    String friendlyURLPath = null; 
    String portletId = portletURL.getPortletId(); 
     String action = GetterUtil.getString(portletURL.getParameter("action")); 
    if(action.equals("step1")){ 
     System.out.println("step1"); 

    } 
    friendlyURLPath = StringPool.FORWARD_SLASH +getMapping() 
        + StringPool.FORWARD_SLASH + action 
        ; 

     if (Validator.isNotNull(friendlyURLPath)) { 

      //parametri da rimuovere dalla portleturl 

      portletURL.addParameterIncludedInPath("action"); 

      portletURL.addParameterIncludedInPath("p_p_id"); 
      portletURL.addParameterIncludedInPath("p_p_lifecycle"); 
      portletURL.addParameterIncludedInPath("p_p_state"); 
      portletURL.addParameterIncludedInPath("p_p_mode"); 
      portletURL.addParameterIncludedInPath("p_p_col_id"); 
      portletURL.addParameterIncludedInPath("p_p_col_count"); 

     } 


    } 
    // return orignal unformatted url 
    return friendlyURLPath; 

} 



public void populateParams(String friendlyURLPath, Map<String, String[]> parameterMap) { 
    System.out.println(friendlyURLPath); 
    System.out.println(parameterMap.size()); 


} 

любой намек?

ответ

0

populateParams() делает обратную сторону buildPath(). Он вызывается, когда дружественный URL-адрес должен быть преобразован в исходный URL-адрес портфолио Liferay. Это должно быть вызвано, например, при переходе на дружественный URL-адрес. Затем Liferay вызовет populateParams(), чтобы создать URL-адрес Liferay (вы знаете, длинный с большим количеством параметров).

Короче говоря, buildPath() используется для создания дружественного URL-адреса и populateParams() используется для создания URL-адреса портлета в стиле Liferay. Таким образом, отображение работает в обоих направлениях.

+0

Здесь также большое объяснение того, как дружественные URL-адреса обрабатываются в Liferay 5. http://www.devatwork.nl/2010/04/seo-friendly-urls-for-liferay-portlets/ – semonte

+0

Это ясно. .. проблема, в моем портлете, заключается в том, что populateParams не запускается, поэтому portletUrl написан в дружественном режиме и никогда не переконвертируется (по populateParams) при нажатии ... – zuk

+0

Это странно. Просто попробуйте: удалите разрывы строк при указании дружественного mapper в liferay-portlet.xml. Он вообще не регистрируется (Liferay видит пустую строку). Если не полезно, можете ли вы разместить файл .war, возможно? – semonte

 Смежные вопросы

  • Нет связанных вопросов^_^