portlet:renderUrl - 如何使 URL 相对?

发布于 2024-12-13 08:15:41 字数 444 浏览 0 评论 0原文

我在 portlet 中使用 http 与 https 链接时遇到问题。我使用 jboss liferay 6.0,但它与本例无关。

Portlet 可以在 http 或 https 模式下使用。 Portlet 标签创建绝对 URL。我需要这个相对的才能正确使用 http 和 https。

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

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

请不要使用 JavaScript。

谢谢

I have problem with http vs https link in portlets. I work with jboss liferay 6.0 but it is not relevant in this case.

Portlets may be used in http or https mode. Portlet tag creates absolute URL. I would need this relative to work correctly with http vs https.

I know secure attribute, but I don't want it always secure.

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

Please no javascript for this.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

属性 2024-12-20 08:15:41

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

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

//set all the params on detailLink here

model.setAttribute("detailLink",detailLink);

On the server, you will know whether you are in http or http mode. So you could create it server side using something like this

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

//set all the params on detailLink here

model.setAttribute("detailLink",detailLink);
忘羡 2024-12-20 08:15:41

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

如果您不想继续使用 javascript,那么您可以在 jsp 页面中创建 Java 方法,最好是在 init 等常见 jsp 页面中。 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];
}

%>

该机制将满足您的要求。

You can use the Relative URL concept here...

If you don't want to go ahead with javascript then you can create a Java method in your jsp page, preferably in a common jsp page like init.jsp and place the following method:

<%!

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;
}

%> 

You can call this method on your url and it would return the string having path and parameters.

For example; if you pass cURL as

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

then it will return

/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

Also you can use themeDisplay.getURLPortal() method to split absolute url to get required relative url out of it.

<%!

private String _getRelativePath(String cURL, ThemeDisplay themeDisplay) {

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

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

        return urlArr[1];
}

%>

This mechanism will fulfill your requirement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文