【问题标题】:Liferay 5.2: extending BaseFriendlyURLMapper, populateParams() method not triggeredLiferay 5.2:扩展 BaseFriendlyURLMapper,未触发 populateParams() 方法
【发布时间】:2012-04-10 02:52:47
【问题描述】:

我尝试在 Liferay5.2 - Jboss4.2 应用服务器下扩展 BaseFriendlyURLMapper... buildPath() 方法没有问题,但我无法理解 populateParams() 何时触发... 即使在调试模式下也没有

p>

这是我的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() );


}

有什么提示吗?

【问题讨论】:

    标签: liferay friendly-url


    【解决方案1】:

    populateParams() 与 buildPath() 相反。当友好的 URL 需要转换为原始 Liferay portlet URL 时调用它。例如,当您转到友好 URL 时,它应该被触发。然后 Liferay 将调用 populateParams() 来构建一个 Liferay URL(你知道,有很多参数的长 URL)。

    简而言之,buildPath() 用于生成外观友好的 URL,populateParams() 用于构建 Liferay 样式的 portlet URL。这样,映射可以双向工作。

    【讨论】:

    • 这里也很好地解释了 Liferay 5 如何处理友好的 URL。devatwork.nl/2010/04/seo-friendly-urls-for-liferay-portlets
    • 这很清楚...在我的 portlet 中,问题是 populateParams 没有被触发,所以 portletUrl 是以友好模式编写的,并且在单击时从不重新转换(通过 populateParams)...
    • 这确实很奇怪。快速尝试一下:在 liferay-portlet.xml 中指定友好映射器时删除换行符。它可能根本没有被注册(Liferay 看到一个空字符串)。如果没有帮助,您能否发布 .war 文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多