Общий вид сетки для портала Liferay

Надеюсь у тебя все хорошо.

Это мой сценарий. У меня есть несколько (20+) портлетов Liferay, которые используют сетки/таблицы для отображения данных.

Каждый портлет извлекает данные на основе разных критериев.

Тем не менее, сетка такая же, но с некоторыми общими функциями, такими как фильтрация, нумерация страниц, экспорт данных и т. д.

В настоящее время каждый раз, когда нам приходится вносить изменения в стиль сетки, мне приходится вносить изменения в каждом из более чем 20 портлетов. Это действительно неэффективно и приводит к потере большого количества времени.

Поэтому мне было интересно, можно ли создать общий «портлет» или «составной', чтобы он мог отображать данные из нескольких портлетов? Чтобы уточнить, общий портлет/композит будет содержать сетку, фильтрацию, разбиение на страницы, экспорт и т. д. функции.

Этот общий портлет/композит будет получать данные от различных портлетов и просто отображать их.

Следовательно, если мне нужно внести какие-либо изменения в стиль сетки, будет достаточно внесения изменений только в одном месте.

Кто-нибудь сталкивался с таким сценарием раньше?

У вас есть решение?

Заранее благодарю за любую помощь.


person Shahriar N Khondokar    schedule 07.02.2013    source источник


Ответы (2)


Если вам нужно только извлекать данные по разным критериям, иметь такие функции, как экспорт данных, печать, разбиение на страницы и т. д., вам не нужно более 20 различных портлетов, вы можете использовать один портлет и иметь более 20 его экземпляров, каждый из которых будет настроен как enable.export , enable.print, data.criteria и так далее. Внутри портлета ваша логика будет строить сетку и данные, которые вам нужны.

Если вам действительно нужен общий портлет, вы можете попытаться собрать все свои 20+ портлетов в одном .war. Вы бы просто включили jsp, которые являются общими для некоторых портлетов, расширенных контроллеров и т. д.

Даже больше... Если вам нужно отправлять данные между портлетами, вы можете создать javascript-контроллеры, которые будут отправлять события друг другу, через Ajax получать данные и заполнять свои jsps (в этом случае вы можете использовать некоторые шаблоны). Спрашивайте, если что-то непонятно.

person Artyom    schedule 07.02.2013

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

Однако вы можете попробовать использовать средство Interportlet Communication от Liferay для передачи данных из исходных портлетов в целевой портлет — http://www.liferay.com/community/wiki/-/wiki/Main/Inter-portlet+communication

Но у него есть свои предостережения: вам придется либо отправлять данные в браузере с помощью событий AJAX или JS, либо использовать события JSR-286 (портлеты 2.0), которые работают на стороне сервера, но требуют, чтобы одно из них запускало действие в порядок возникновения событий (т. е. открытие портлета с URL-адресом действия, а не URL-адресом вывода). Подробнее об этом здесь — http://www.liferay.com/community/wiki/-/wiki/Main/Portlet+to+Portlet+Communication

person mvmn    schedule 20.11.2013