Использование внешней ссылки в структуре/шаблоне Liferay

В настоящее время я разрабатываю комбинацию Структура/Шаблон в Liferay 6.2 и обнаружил проблему.

В моей структуре пользователь может ввести URL-адрес внешнего сайта (например, www.google.com):

<dynamic-element dataType="string" indexType="keyword" localizable="true" name="website" readOnly="false" repeatable="false" required="false" showLabel="true" type="text" width="small">
        <meta-data locale="de_DE">
            <entry name="label">
                <![CDATA[Website (www.)]]>
            </entry>
            <entry name="predefinedValue">
                <![CDATA[]]>
            </entry>
            <entry name="tip">
                <![CDATA[]]>
            </entry>
        </meta-data>
    </dynamic-element>

В моем шаблоне мне нужна ссылка на эту страницу, но текущий код просто добавляет строковое значение структуры к базовому URL-адресу моего сайта. Что-то вроде www.company-url.de/web/www.google.de

<a href="${website.getData()}">More information</a>

(Я не могу указать правильные URL-адреса, потому что не уверен, разрешено ли это)

Есть ли способ сообщить Liferay использовать строку как независимый URL-адрес, а не добавлять ее?

Спасибо большое за вашу помощь.


person Hookerino    schedule 22.09.2015    source источник
comment
Вам следует проверить определение URL. www.google.de — это имя хоста, но не URL-адрес. URL-адрес всегда абсолютный, включая схему. Ожидается, что все остальное будет относительно текущей страницы.   -  person Tobias Liefke    schedule 22.09.2015
comment
Спасибо, что научили меня такому факту. Но я все еще думаю, что люди все еще должны быть в состоянии понять, в чем моя проблема. И даже если пользователь действительно вводит URL-адрес, он все равно просто добавляется к текущей странице.   -  person Hookerino    schedule 22.09.2015
comment
Пожалуйста, попробуйте сами: если пользователь вводит абсолютный URL-адрес (http://www.google.de/), он не будет добавлен к текущей странице.   -  person Tobias Liefke    schedule 22.09.2015
comment
И в этом проблема. Я не могу быть уверен, использует ли пользователь схему или нет. Из-за этого проблема существует. И да, я отдаю вам должное за часть URL, я не указал ее правильно.   -  person Hookerino    schedule 22.09.2015
comment
А в чем проблема с <#if !website.getData()?contains(":")>, как указано ниже? В этом случае преобразуются только URL-адреса, которые не являются абсолютными.   -  person Tobias Liefke    schedule 22.09.2015
comment
На данный момент это лучшее решение. Я просто жду немного, пока я не отмечу это как правильное.   -  person Hookerino    schedule 22.09.2015


Ответы (2)


Проверьте, содержит ли ${website.getData()} ":", если нет, добавьте его самостоятельно:

<#assign myURL = website.getData()>

<#if !website.getData()?matches(".*:.*")>
    <#assign myURL = "http://" + myURL>
</#if>

<a href="${myURL}">More information</a>

Однако этого абсолютно недостаточно для проверки URL...

person Marco Mercuri    schedule 22.09.2015
comment
Это решение, которого я хочу избежать, потому что я не уверен, что пользователь вводит в качестве URL-адреса. Например, он может написать https://. Я надеялся, что есть способ сделать это как-то автоматически. И разве ваше предложение if не в неправильном порядке? Я думаю, что у вас есть http:// дважды в URL-адресе - person Hookerino; 22.09.2015
comment
Тогда вам следует использовать contains(":"). Порядок правильный, так как ! отрицает условие. - person Tobias Liefke; 22.09.2015
comment
О, не видел !, извините ;) - person Hookerino; 22.09.2015

Проблема в том, что вы используете метод ".getData()", как вы сказали, это просто строка. Попробуйте вместо этого использовать ".getText()":

<a href="${website.getText()}">More information</a>

Надеюсь, это поможет, и дайте мне знать, если это работает или нет :)

person Hexen    schedule 22.09.2015
comment
Liferay говорит, что getText не определен. (И да, я использовал скобки;)) - person Hookerino; 22.09.2015