在Visualforce中,“ reRender”刷新部分后,“ rendered”是否重新执行?

时间:2019-02-15 04:02:42

标签: salesforce visualforce

当我单击“编辑”链接时,我试图隐藏“ searchCriteria”部分。隐藏是在控制器的“ editSearchResult()”方法中使用“ pageLoad”变量完成的。

“ pageLoad”用于“ searchCriteria”部分中的呈现属性。但是,单击“编辑”链接后,该部分不会使用Controller中的更新值进行刷新。

但是,如果我删除“ searchCriteria”部分的“ rendered”属性,系统将使用Controller中的更新值刷新该部分。谁能解释“渲染”的显示方式?

Visualforce代码:

<apex:page controller="RerenderDemoController">
    <apex:form id="thisForm">
        <apex:outputPanel id="searchCriteria" rendered="{!pageLoad}">
            <apex:pageBlock>
                <apex:pageBlockSection>
                    This is Search Criteria Section. Page Load: {!pageLoad}, 
                    User: <apex:outputText value="{!userName}"> 
        </apex:outputText> 
                </apex:pageBlockSection>
            </apex:pageBlock>
        </apex:outputPanel>

        <apex:outputPanel id="searchResults">
            <apex:pageBlock>
                <apex:pageBlockSection>
                    This is Search Results Section. {!accts}
                </apex:pageBlockSection>
            </apex:pageBlock>
        </apex:outputPanel>

        <apex:outputPanel id="EditResult">
            <apex:pageBlock>
                <apex:pageBlockSection>
                    This is Edit Result Section.
                    <apex:commandLink action="{!editSearchResult}" reRender="searchCriteria">Edit</apex:commandLink>
                </apex:pageBlockSection>
            </apex:pageBlock>
        </apex:outputPanel>

    </apex:form>
</apex:page>

顶点控制器:

public class RerenderDemoController {
    public List<Account> accts {get; set;}
    public Boolean pageLoad {get; set;}
    public String userName {get; set;}

    public RerenderDemoController() {
        pageLoad = true;
        userName = 'My First Name';
        accts = [select id, name from Account limit 10];
    }

    public void editSearchResult() {
        pageLoad = false;
        accts = [select id, name from Account limit 20];
        userName = 'My Last Name';
    }
}

2 个答案:

答案 0 :(得分:0)

您可以做的是,将您的outputPanel换成另一个outputPanel

<apex:outputPanel id="searchCriteria">
    <apex:outputPanel rendered="{!pageLoad}">
        <apex:pageBlock>
            <apex:pageBlockSection>
                This is Search Criteria Section. Page Load: {!pageLoad}, 
                User: <apex:outputText value="{!userName}"> 
                     </apex:outputText> 
           </apex:pageBlockSection>
         </apex:pageBlock>
   </apex:outputPanel>
</apex:outputPanel>

希望,这将解决您的问题。

答案 1 :(得分:0)

您可以使用JQuery隐藏内容,只需使用html类并使用[jquery]:https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js

并使用$('.classname').hide(); 希望对您有帮助。