portlet:renderUrl - 如何使URL相对?

时间:2011-11-03 09:28:45

标签: https portlet relative-path taglib

我在portlet中遇到http vs https链接有问题。我使用jboss liferay 6.0,但在这种情况下它并不相关。

Portlet可以在http或https模式下使用。 Portlet标记创建绝对URL。我需要这个相对与http vs https正常工作。

我知道安全属性,但我不希望它始终安全。

<portlet:renderURL var="detailLink">
    <portlet:param name="id" value="${recordId}" />
    <portlet:param name="backURL" value="${backLink}" />
</portlet:renderURL>

请不要使用javascript。

谢谢

2 个答案:

答案 0 :(得分:0)

在服务器上,您将知道您是处于http模式还是http模式。所以你可以用这样的东西来创建服务器端

PortletUrl detailLink renderResponse.createRenderUrl();
detailLink.setSecure(renderRequest.isSecure());

//set all the params on detailLink here

model.setAttribute("detailLink",detailLink);

答案 1 :(得分:0)

您可以在此处使用相对网址概念...

如果您不想继续使用javascript,那么您可以在jsp页面中创建一个Java方法,最好是在一个常见的jsp页面中,如init.jsp,并放置以下方法:

<%!

private String _getRelativePath(String cURL) {
        if (Validator.isNull(cURL)) {
            return cURL;
        }

        if (cURL.startsWith(Http.HTTP)) {
            int pos = cURL.indexOf(
                StringPool.SLASH, Http.HTTPS_WITH_SLASH.length());

            cURL = cURL.substring(pos);
        }

        return cURL;
}

%> 

您可以在您的网址上调用此方法,它将返回包含路径和参数的字符串。

例如;如果你将cURL传递给

http://localhost:8080/web/guest/home?p_p_id=58&p_p_lifecycle=1&p_p_state=pop_up&p_p_mode=view&_58_struts_action=%2Flogin%2Flogin

然后它会返回

/web/guest/home?p_p_id=58&p_p_lifecycle=1&p_p_state=pop_up&p_p_mode=view&_58_struts_action=%2Flogin%2Flogin

此外,您可以使用 themeDisplay.getURLPortal()方法拆分绝对网址,以获取所需的相对网址。

<%!

private String _getRelativePath(String cURL, ThemeDisplay themeDisplay) {

        if (Validator.isNull(cURL)) {
            return cURL;
        }

        String [] urlArr = cURL.split(themeDisplay.getURLPortal());

        return urlArr[1];
}

%>

此机制将满足您的要求。