2013-12-02 3 views
2

Мне нужно написать портлет для Liferay Portal. Liferay предоставляет удобный класс MVCPortlet, который позволяет использовать простую маршрутизацию для фазы действия, используя атрибут «name» для объекта: < портлет: actionURL > тег и простая маршрутизация для фазы просмотра с использованием параметра mvcPath для <renderURL> тег. Однако я скучаю, это возможность подготовить представление для этапа визуализации. Например, загрузите некоторые объекты из базы данных для ссылки с JSP.Как подготовить вид jsp с помощью портлета Liferay MVC

Я понимаю, что я могу включить Java-код в JSP, но это считается плохой практикой.

Я использую Liferay 6.1.

+0

вы получаете объекты базы данных в методе визуализации или в методе действий и устанавливаете его в атрибуте запроса и получаете их в jsp и показываете –

ответ

1

Существует более чем 1 способ сделать то, что вы хотите.

  1. Перед визуализацией конкретной страницы убедитесь, что выполнено конкретное действие. Извлеките свои ресурсы и передайте их как параметры рендеринга, так что jsp может их получить. практически, вы будете использовать действия для перенаправления на разные страницы.
  2. Переопределите функцию рендеринга, проверьте загружаемую страницу и извлеките ресурсы, если необходимо, для рендеринга jsp
  3. используйте фазу ресурса в своем jsp для вызова для требуемых ресурсов.

Также убедитесь, что вы понимаете значение 2-phase (3-фазное, если вы считаете также ресурсную фазу) архитектуры MVCPortlet.

Теперь о сохранении кода jsp в чистом виде. Я не уверен, что MVCPortet поможет вам в этом. Я никогда не видел проект mvcPortlet, который не вводил java-фрагменты внутри jsp-кода здесь и там. Например, вам нужно будет использовать код Java для чтения атрибутов запроса

+1

. Я использовал вариант 2. В принципе Я нахожу метод с тем же именем, что и JSP в атрибуте mvcPath, и если есть такой метод, я вызываю его через отражение перед включением JSP-файла. Поэтому я просто готовлю все, что мне нужно для JSP в этом методе. Результат был достаточно хорош для меня. – vbezhenar

+0

Рад, что это сработало. Второй подход сладок, если у вас мало страниц и сложная бизнес-модель. В противном случае вы закончите чудовищную функцию render() – yannicuLar

1

Вы должен определить свое различные точки зрения (JSP) в INIT-пары тега portlet.xml как следующее:

<init-param> 
    <name>view-jsp</name> 
    <value>/jsp/view.jsp</value> 
</init-param> 

<init-param> 
    <name>edit-jsp</name> 
    <value>/jsp/edit.jsp</value> 
</init-param> 

<init-param> 
    <name>search-jsp</name> 
    <value>/jsp/search.jsp</value> 
</init-param> 

Отправить дополнительный параметр из портлета: renderURL/портлет: actionURL к indentify ваших действий типа в

<portlet:actionURL var="editPageURL"> 
<portlet:param name="action" value="edit"/> 
</portlet:actionURL> 

Затем в файле (Java), установить глобальную переменную, которая доступна в обеих фазах (оказывают/действие) и действие фильтра через параметр типа как:

String action = ParamUtil.getString(request, "action", "view"); 
if(action.equals("edit")){ 
    // do your work here 
}else if(action.equals("search")){ 
}else{ 
} 
Смежные вопросы