Рекомендации Liferay о том, как создать модель / слой представления и как отобразить 2 записи таблицы с использованием liferay-search-container - PullRequest
0 голосов
/ 28 февраля 2019

Какова лучшая практика для реализации слоя представления в Liferay?И как мне показать записи из двух таблиц, используя «строку-контейнер-поиск liferay»?

Далее я объясню, что я сделал в своем проекте, чтобы вы правильно поняли мой вопрос и что яя говорю о.

Я использовал сервисный конструктор и получил PERSISTENCE и SERVICE слой

, который я использовал service.xml и создал мои 2 сущности.

Затем в xxxLocalServiceImpl я создал необходимые методы для обновления, добавления, удаления ...

И затемдля слоя presentation (просмотр) я добавил новый модуль liferay, используя шаблон портлета mvc под названием xxx-WEB (так что теперь у меня есть xxx-API, xxx-SERVICE и XXX-WEB).

Я все это сделал, поэтому у меня есть три слоя верно?(Модель, контроллер и представление).

Итак, у меня возникла проблема с отображением записей из двух таблиц всего в одной Когда я говорю это, я имею в виду , показывающийданные двух таблиц с использованием Liferay-search-container , поскольку в className, как показано ниже, я уже определяю модель и не могу определить другую модель для отображения данных из двух таблиц впоиск контейнера.пример: <liferay-ui:search-container-row className="com.liferay.training.xxx.model.xxx" keyProperty="xxx" modelVar="xxx">

Поскольку я могу использовать только одну модель для получения данных таблицы, я не смог показать данные из другой таблицы.

Итак, что я сделал, так это выставил другую сущность (Автор) другой (Музыка).

Я пошел в класс MusicImpl , а создал свойство Author.type, методы getter и setters.

Затем в MusicLocalServiceImpl в методе addMusicAndAuthor Я установил автора для этой музыки пример: music.setAuthor (автор).

После этого для возможности отображения всех данных в моем JSP мне понадобилось переопределить метод получения MovieLocalService , getMusics (int start, int end) .

То, что я сделал в моем переопределении , было выборкой всех фильмов , и длякаждый фильм, который я установил Автор

код:

@Override
public List<Music> getMusics(int startPos, int endPost) {
    List<Music> musics = super.getMusics(startPos, endPost);

    if ((musics != null && (!musics.isEmpty()))) {
        Author author;

        for (Music music: musics) {
            try {
                author = AuthorLocalServiceUtil.getAuthorByMusicId(author.getMusicId());
                music.setAuthor(author);
            } catch (NoSuchAuthorException e) {
                e.printStackTrace();
            }
        }
    }
    return musics;
}

И тогда в моем JSP я смог показать де данные изом две таблицы, выполняющие следующее:

<liferay-ui:search-container-results>
    <%
        int totalMusics = MusicLocalServiceUtil.getMusicsCount();
        results = MusicLocalServiceUtil.getMusics(searchContainer.getStart(), searchContainer.getEnd());
        searchContainer.setTotal(totalMusics);
        searchContainer.setResults(results);
    %>
</liferay-ui:search-container-results>

<liferay-ui:search-container-row className="com.liferay.training.musics.model.Music"
    keyProperty="musicId" modelVar="currentMusic">

        <liferay-ui:search-container-column-text name="Name" property="musicName"/>

        <liferay-ui:search-container-column-text name="author" value="<%=currentMusic.getAuthor().getAuthorName() %>"/>

        <liferay-ui:search-container-column-jsp align="center" path="/button.jsp"/>
</liferay-ui:search-container-row>

таким образом, я мог бы показать в таблице записи из 2 таблиц.

Но что я хочучтобы узнать, если есть ли другой способ сделать это , потому что друг сказал мне, что может сделать viewmodel и слой представления , он сказал мнечтобы создать пакет для представления модели, я предполагаю, что классы с именами MusicViewModel и AuthorViewModel с геттерами и сеттерами и с этим мне не нужно переопределять, и я не должен этого делать.

но это не имеет особого смысла для меня, так как у меня уже есть слой представления, и liferay уже сделал эту модель для меня в API, верно?или я что-то упустил?Есть ли другой способ показать данные из двух таблиц без этого переопределения?имеет ли смысл делать то, что сказал мне мой друг?

Большое спасибо!

...