ajax - jsf commandLink 和 f :ajax partial rendering 的奇怪行为

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

最佳答案

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

另见:

关于ajax - jsf commandLink 和 f :ajax partial rendering 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573061/

相关文章:

java - JSF 入门 - Eclipse 上的 Richfaces

java - 不使用网络在本地连接到 Apache Tomcat

java - 在具有不同操作系统的不同计算机上的两个 Tomcat 服务器上部署 Web 应用程序

ajax - 反 CSRF token 和 Javascript

javascript - php在html内循环时发生循环错误

java - 绑定(bind)用户实体和 GlassFish 主体

git - hudson 无法从 git 存储库中获取

jquery - 在 jQuery UI 日期选择器中仅选择特定日期(日期列表来自 AJAX)

javascript - 如何将数据值从 View 传递到 Django 中的模板?

spring - 在 JSF 2.2 中使用 OmniFaces 2.1 ViewScoped 和 Spring 3.1.0