使用jsf commandLink和f:ajax部分呈现的奇怪行为

时间:2013-09-02 12:16:20

标签: 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" 
        value="#{msgs.search}" action="#{magazineListBean.toggleOptions()}"
    >
        <f:ajax render="advanced_search_form"/>
    </h:commandLink>
</h:panelGroup>

这是辅助bean中的函数:

public void toggleOptions() {
     if(showOptions){
          showOptions = false;
     }else{
          showOptions = true;
     }
}

commandLink按预期工作,但速度很慢。显然,在处理toggleOptions之前,实体列表的getter被多次调用(这是非常昂贵的,因为所有这些都是从数据库中提取的)。然而,该清单是单独的形式。 我有一个preRender()方法,但它也从不调用getter。最重要的是,我不知道这里发生了什么 - 我错过了什么吗?感谢任何暗示,所以请不要犹豫评论。将提供所需的任何进一步信息。非常感谢!

1 个答案:

答案 0 :(得分:1)

你只是犯了一个严重的设计错误。您正在使用 getter 方法执行业务逻辑。 getter方法旨在返回(已经准备好的)bean属性,而不是执行业务逻辑。只是不要在getter方法中做业务逻辑而且你已经完成了所有设置。业务逻辑应该在bean的@PostConstruct方法或任何动作/事件监听器方法中执行。

另见: