Портлет Spring переходит в фазу рендеринга из фазы действия

Если в контроллере портлета весной, у меня есть один метофот с пометкой @ActionMapping и другой метод аннотирован @RenderMapping(params = "action=detail")Я вижу, что, чтобы перейти от метода № 1 к методу № 2, мы не вызываем метод № 2 напрямую, вместо этого мы устанавливаем Actionresponse.setRenderParameter("action", "detail") в методе № 1 и методе № 2 подберут его отсюда.

Мой первый вопрос: какие преимущества мы получаем от отделения фазы рендеринга от фазы действия (или я должен сказать "фаза запроса")? А также, почему мы не делаем прямой вызов метода, а вместо этого вызываем метод, устанавливая параметр рендеринга?

2 ответа

Ответить на ваши вопросы

  1. Портлеты могут сосуществовать на странице. Независимо от того, какое действие вы выполнили в портлете, контейнер портала будет вызывать render() метод на всех портлетах для сбора фрагментов html и их агрегирования, чтобы подготовить весь просмотр страницы и предоставить его браузеру. Наличие 2 методов - это не только преимущество, но и принудительное выполнение вышеупомянутого требования, которое разделяет бизнес-логику. processAction() это может изменить состояние вашей системы, как сказал @Mark Chorley, и вам известно о логике рендеринга "И" - render() который решает представление для рендеринга, что иногда вы не знаете о выполнении.

  2. Это просто, почему вы звоните start() скорее тогда run() на Thread хотя вы можете ссылаться run метод напрямую. Есть много причин, почему вы не должны вызывать метод напрямую

    1. Вы не несете ответственности за объединение фрагментов HTML из всех портлетов, находящихся на странице.
    2. Вы не тот, кто делает параметры Public Render доступными в render() Метод заинтересованных портлетов.
    3. Определенно, вы не хотите взять на себя головную боль делегирования Events к подписанным портлетам

Это то, что портлеты делают в основном. Что касается того, какое преимущество вы получаете - хорошо, это позволяет вам отделить ваши действия (обычно изменение данных) от подготовки данных для вашего просмотра.

И Action, и Render являются разными этапами одного запроса. Запросы действий предшествуют запросам Render, как вы говорите. "Фаза запроса" звучит для меня непонятно. Фаза действия и фаза рендеринга являются более полезными терминами.

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

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

Если у вас виден только один портлет, это, возможно, менее понятно. Это имеет больше смысла, когда у вас есть несколько портлетов на одной странице.

Другие вопросы по тегам