jsf commandLink和f:ajax部分呈现的奇怪行为
我有一个显示实体列表的页面。在顶部,我有一个搜索菜单,默认情况下是隐藏的,如果标志为jsf commandLink和f:ajax部分呈现的奇怪行为,ajax,jsf,tomcat,jsf-2,primefaces,Ajax,Jsf,Tomcat,Jsf 2,Primefaces,我有一个显示实体列表的页面。在顶部,我有一个搜索菜单,默认情况下是隐藏的,如果标志为true,则会呈现该菜单。通过以下按钮切换该标志: <h:panelGroup layout="block" id="display_options" class="options"> <h:commandLink id="options_hidden" class="teaser_title left cursor_hand" val
true
,则会呈现该菜单。通过以下按钮切换该标志:
<h:panelGroup layout="block" id="display_options" class="options">
<h:commandLink
id="options_hidden"
class="teaser_title left cursor_hand"
value="#{msgs.search}" action="#{magazineListBean.toggleOptions()}"
>
<f:ajax render="advanced_search_form"/>
</h:commandLink>
</h:panelGroup>
commandLink按预期工作,但速度非常慢。显然,在处理toggleOptions之前,entitylist的getter会被调用几次(这相当昂贵,因为它们都是从数据库中提取的)。然而,该列表是另一种形式。
我确实有一个
preRender()
方法,但它也从不调用getter。总之,我不知道这里发生了什么——我是不是错过了什么?感谢任何提示,所以请不要犹豫发表评论。将提供所需的任何进一步信息。非常感谢 您只是犯了一个严重的设计错误。您正在使用getter方法执行业务逻辑。getter方法旨在返回(已经准备好的)bean属性,而不是执行业务逻辑。只要不在getter方法中执行业务逻辑,您就已经准备好了。业务逻辑应该在bean的@PostConstruct
方法中执行,或者在任何操作/事件侦听器方法中执行
另见:
public void toggleOptions() {
if(showOptions){
showOptions = false;
}else{
showOptions = true;
}
}