#https #portlet #relative-path #taglib
#https #портлет #относительный путь #taglib
Вопрос:
У меня проблема со ссылкой http и https в портлетах. Я работаю с jboss liferay 6.0, но в данном случае это не имеет значения.
Портлеты могут использоваться в режиме http или https. Тег портлета создает абсолютный URL. Мне нужен этот относительный для корректной работы с http и https.
Я знаю атрибут secure, но я не хочу, чтобы он всегда был безопасным.
<portlet:renderURL var="detailLink">
<portlet:param name="id" value="${recordId}" />
<portlet:param name="backURL" value="${backLink}" />
</portlet:renderURL>
Пожалуйста, нет javascript для этого.
Спасибо
Комментарии:
1. Не могли бы вы просто манипулировать detailLink вручную?
2. Я использую этот тег во многих портлетах. Должен ли я создать свой собственный тег для чего-то, что должно быть уже решено, или я действительно только один с этой проблемой? Спасибо.
3. На одном сайте один и тот же портлет должен содержать несколько URL
http
-адресов, а некоторыеhttps
— это то, что вы хотите?4. Нет, когда я захожу на веб-страницу
http://whatever.com
, я хочу видеть ссылки на этой страницеhttp://whatever.com/nextPage
. Но когда я захожу на веб-страницуhttps://whatever.com
, я хочу видеть ссылки на этой страницеhttps://whatever.com/nextPage
Ответ №1:
На сервере вы будете знать, находитесь ли вы в режиме http или http. Итак, вы могли бы создать его на стороне сервера, используя что-то вроде этого
PortletUrl detailLink renderResponse.createRenderUrl();
detailLink.setSecure(renderRequest.isSecure());
//set all the params on detailLink here
model.setAttribute("detailLink",detailLink);
Ответ №2:
Здесь можно использовать концепцию относительного 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=58amp;p_p_lifecycle=1amp;p_p_state=pop_upamp;p_p_mode=viewamp;_58_struts_action=/login/login
затем он вернет
/web/guest/home?p_p_id=58amp;p_p_lifecycle=1amp;p_p_state=pop_upamp;p_p_mode=viewamp;_58_struts_action=/login/login
Также вы можете использовать метод 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];
}
%>
Этот механизм удовлетворит вашим требованиям.