a4j:keepAlive在渲染部分

时间:2012-01-20 13:49:47

标签: richfaces jsf-1.2 ajax4jsf

我想知道(或者可能会受到一些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的范围是一个请求。

只有当sht属性设置为true或者无关紧要(发生keepAlive的地方)时,jsp页面中的keepAlive位置是否导致扩展bean存在?

1 个答案:

答案 0 :(得分:2)

将keepAlive标记放在jsp中没有区别。但keepAlive标记组件和@KeepAlive注释之间存在很大差异。

标记组件

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

注释

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

主要区别在于,如果要将bean中的属性绑定到JSP中的组件,则第二个更好。比方说,你有一个这样的场景:

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

如果使用第一种方法,则keepAlive根本不起作用,并且将在每个请求中重新创建bean。使用第二种方法,您的bean将为用户在您的视图中执行的每个请求创建一次。

另外,如果你只是想让你的bean为ajax请求保持活着,不要忘记将ajaxOnly属性设置为true。