portlet: renderUrl - как сделать URL относительным? - PullRequest
3 голосов
/ 03 ноября 2011

У меня проблема с http или https ссылкой в ​​портлетах.Я работаю с jboss liferay 6.0, но в данном случае это не актуально.

Портлеты могут использоваться в режиме http или https.Тег портлета создает абсолютный URL.Мне нужно, чтобы этот родственник работал правильно с http против https.

Я знаю защищенный атрибут, но я не хочу, чтобы он всегда был безопасным.

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

Пожалуйста, не используйте JavaScript для этого.

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 апреля 2016

Вы можете использовать концепцию Относительный URL здесь ...

Если вы не хотите использовать javascript, вы можете создать метод Java на своей странице jsp, предпочтительно на обычной странице 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;
}

%> 

Вы можете вызвать этот метод в своем URL, и он вернет строку, содержащую путь и параметры.

Например; если вы передаете 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 () метод для разделения абсолютного URL, чтобы получить из него требуемый относительный URL.

<%!

private String _getRelativePath(String cURL, ThemeDisplay themeDisplay) {

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

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

        return urlArr[1];
}

%>

Этот механизм удовлетворит ваше требование.

0 голосов
/ 14 апреля 2013

На сервере вы узнаете, находитесь ли вы в режиме http или http. Таким образом, вы можете создать его на стороне сервера, используя что-то вроде

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

//set all the params on detailLink here

model.setAttribute("detailLink",detailLink);
...