a4j: keepAlive в отображаемом разделе - PullRequest
2 голосов
/ 20 января 2012

Мне интересно (или, возможно, страдают от некоторых побочных эффектов keepAlive) о расположении (угадайте, что?) A4j: keepAlive на странице jsp ...

Есть ли разница между ... скажем:

<a4j:keepAlive beanName="myBean"/>
<h:panelGrid rendered="#{myBean.sth}">
    <%-- some other stuff-->
</h:panelGroup>

и

<h:panelGrid rendered="#{myBean.sth}">
    <a4j:keepAlive beanName="myBean"/>
    <%-- some other stuff-->
</h:panelGroup>

myBean находится в области запроса.

Приводит ли расположение keepAlive на странице jsp к расширению существования bean-компонента, только если для свойства sht установлено значение true или это не имеет значения (где происходит keepAlive)?

1 Ответ

2 голосов
/ 21 января 2012

Нет разницы, где вы поместите тег keepAlive в jsp. Но между компонентом тега keepAlive и аннотацией @KeepAlive существует большая разница.

Компонент тега

<a4j:keepAlive bean="myBean" />
<!-- some stuff -->

Примечание

@KeepAlive
public class MyBean {
    //some stuff...
}

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

<rich:dataTable binding="#{myBean.hdtMyDataTable}">
    <!-- columns here -->
</rich:dataTable>

Если вы используете первый подход, то keepAlive не будет работать вообще, и бин будет воссоздан при каждом запросе. При втором подходе ваш бин будет создаваться один раз для каждого запроса, который пользователи могут сделать в вашем представлении.

Кроме того, не забудьте установить для атрибута ajaxOnly значение true, если вы просто хотите, чтобы ваш бин оставался активным для запросов ajax.

...