我想知道(或者可能会受到一些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存在?
答案 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。