2015-02-25 1 views
0

Я читал here, что actionrequest действителен только во время фазы действия, а RenderRequest действителен только во время фазы визуализации. Однако если я устанавливаю actionREquest.setAttribute («object», myobject), я могу получить доступ к этому объекту из моего JSP, который, как я понимаю, является фазой визуализации вправо? Как это возможно и как это соотносится с ответом, который я связываю?ActionRequest vs RenderRequest

ответ

0

Вы не должны забывать, что после фазы действия жизненные циклы портлета идут к фазе визуализации. Постарайтесь посмотреть изображение в этом блоге (первое, что я нашел при поиске по Google): http://haitaoblog.blogspot.it/2011/05/portlets-portal.html

Таким образом, JSP может получить доступ к обоим атрибутам в запросе.

С другой стороны, если вам нужно получить доступ в визуализации фазы действия ТОНИРОВАТЬ параметр, вы должны установить его внутри кода действия

actionResponse.setRenderParameter("parameter-name", "value"); 
+0

Ну, тогда я не понимаю, что ТОЧНО - это этап визуализации? Почему бы не всегда использовать атрибут request? – MichelReap

+0

Упрощение, действие можно вызвать только при отправке данных (и только один раз за раз, например, для записи данных), в то время как рендер может вызываться несколько раз. Запрос и ответ - это две разные концепции и объекты (и вы не уверены, что у вас будет все, что вы запрашиваете параметры в следующих рендерах, если действие вызывается в другом портлете на той же странице). Если вам нужно понять ТОЧНО, вам нужно прочитать спецификацию портлета https://www.jcp.org/en/jsr/detail?id=286 или учебник, в котором подробно описывается жизненный цикл портлета. Надеюсь, мой ответ может быть прояснен для вас. –

1

Хотя ActionRequest и RenderRequest являются различные классы/объекты, все они относятся к одному и тому же циклу обработки запросов. Главное отличие состоит в том, что ActionRequest позволяет изменить состояние, RenderRequest не имеет значения.

Хотя только один портлет на странице может обрабатывать действие (за один HTTP-запрос), все портлеты на странице обычно отображают, чтобы составить всю разметку страницы. Это то, что разделение действия/рендеринга приводит вас в мир портлетов. Сервлетам не было этого, потому что один сервлет всегда предназначался для того, чтобы вся страница отображалась на каждом отдельном запросе. Портлеты могут отображать (что они чаще всего делают), и они могут изменять состояние (которое они обычно выполняют в фазе действия)