JSF t:dataList在action listener方法之前调用该值的getter
我有一个JSF 1.2,包含以下内容:JSF t:dataList在action listener方法之前调用该值的getter,jsf,actionlistener,jsf-1.2,Jsf,Actionlistener,Jsf 1.2,我有一个JSF 1.2,包含以下内容: <h:outputText rendered="#{fn:length(testBeanToDelete.names) gt 0}"> <t:dataList value="#{testBeanToDelete.names}" var="name" rowIndexVar="index"> <p>#{name}</p> </t:dataList> </h:ou
<h:outputText rendered="#{fn:length(testBeanToDelete.names) gt 0}">
<t:dataList value="#{testBeanToDelete.names}" var="name" rowIndexVar="index">
<p>#{name}</p>
</t:dataList>
</h:outputText>
<h:form id="test_form">
<h:commandLink value="Filter" actionListener="#{testBeanToDelete.filter}"/>
</h:form>
我的问题是,当我单击filter按钮时,getNames方法在事件方法筛选器之前被调用。
在getNames方法中,我检查name==null,然后创建列表
但是,如果调用filter方法来创建一个新的过滤列表,基本上我想从DB中得到不同的过滤值,但我不想调用DB两次
我怎样才能达到这个目标
提前感谢。在JSF生命周期中,首先要做的是在恢复视图阶段重建页面。这里的要点是按照上次请求的方式重新构建页面。这里叫做getNames 稍后,在JSF生命周期的render response阶段结束时,将再次为新页面的值调用getNames 在恢复视图阶段避免DB调用的唯一方法是保存上次请求中返回的数据列表的集合。您的支持bean需要具有高于请求的作用域,或者您需要在请求之间以某种方式保存它们。这不是小事,如果处理不当,可能会导致服务器中RAM的过度使用,因此要小心
你在用特立尼达吗?然后,解决方案可以是将数据列表的集合保存在中。不过,请考虑一下,避免数据库调用是否值得这么做。您好,我实际上使用的是tomahawk,它具有saveState解决方案,我可以尝试在我的流中使用它。非常感谢你的帮助。