【问题标题】:strange behaviour with jsf commandLink and f:ajax partial renderingjsf commandLink 和 f:ajax 部分渲染的奇怪行为
【发布时间】:2013-09-05 13:16:59
【问题描述】:

我有一个显示实体列表的页面。最重要的是,我有一个搜索菜单,如果标志是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 之前,entitylist 的 getter 被多次调用(这是相当昂贵的,因为它们都是从数据库中提取的)。但是,该列表是单独的形式。 我确实有一个preRender() 方法,但它也从不调用getter。底线,我不知道这里发生了什么 - 我错过了什么吗?感谢任何提示,所以请不要犹豫发表评论。将提供所需的任何进一步信息。非常感谢!

【问题讨论】:

    标签: ajax jsf tomcat jsf-2 primefaces


    【解决方案1】:

    您只是犯了一个严重的设计错误。您在 getter 方法中执行业务逻辑。 getter 方法旨在返回(已经准备好的)bean 属性,而不是执行业务逻辑。只是不要在 getter 方法中执行业务逻辑,一切就绪。业务逻辑应该在 bean 的 @PostConstruct 方法中执行,或者在任何动作/事件监听器方法中执行。

    另见:

    【讨论】:

    • 非常感谢您的回答!你是我的英雄:))
    • 哦 - 还有一件事:当我不想重新渲染组件时,为什么还要调用 getter?
    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 2012-08-03
    • 2011-10-23
    • 2012-12-26
    • 2011-03-17
    • 2011-08-22
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多