Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jsf commandLink和f:ajax部分呈现的奇怪行为_Ajax_Jsf_Tomcat_Jsf 2_Primefaces - Fatal编程技术网

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
方法中执行,或者在任何操作/事件侦听器方法中执行

另见:

非常感谢您的回答!你是我的英雄:))哦,还有一件事:当我不想重新启动组件时,为什么还要调用getter?
public void toggleOptions() {
     if(showOptions){
          showOptions = false;
     }else{
          showOptions = true;
     }
}