Есть ли возможность сделать мою страницу visualforce видимой в компоненте visualforce только в определенных условиях? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть список элементов на моей странице visualforce, которые иногда могут быть пустыми. Страница visualforcece отображается в компоненте visualforce на главной странице. Интересно, есть ли возможность скрыть компонент, если список пуст.

 <apex:repeat var="a" value="{!accounts}">
                <apex:outputLabel for="link" value="{!a.Name} " />
 </apex:repeat>

1 Ответ

1 голос
/ 15 октября 2019

Вы можете использовать атрибут rendered. Что-то вроде

<apex:repeat var "a" value="{!accounts}" rendered="{!NOT(AccountsEmpty)}">
    <apex:outputLabel for="link" value="{!a.name}" />
</apex:repeat>

и в вашем контроллере добавьте метод:

public boolean getAccountsEmpty(){
  return this.accounts == null || this.account.size() == 0;
}

РЕДАКТИРОВАТЬ: Добавление, как также не отображать родительские компоненты / страницу

Здесьэто некоторая углубленная документация по этому , проще говоря, вам нужно добавить атрибут к вашему компоненту с повторением в нем, чтобы вы могли передать в контроллер родительской страницы / компонентов apex, например, если ваша родительская страница имела контроллер apexс именем MyApexController ...

<apex:attribute name="controller" description="parent page controller" type="MyApexController" assignTo="{!pageController}"/>

Затем вы можете получить доступ к его членам с помощью общедоступных методов получения и установки из компонента. Вот как это будет выглядеть Контроллер родительской страницы

public class MyApexController {
  public boolean hasAccounts {get; set;}

  public MyApexController(){
    //Your controller constructor
  }
}

Дочерние компоненты Контроллер Apex

public class MyComponentsController {
  public List<Account> accounts {get; set;}
  public MyApexController pageController {get; set;} //this will get set by apex:attibute
  public MyComponentController(){
    if(getAccountsEmpty()){
      this.pageController.hasAccounts = false; //no accounts let parent page know
    } else {
      this.pageController.hasAccounts = true;
    }
  }

public boolean getAccountsEmpty(){
  return this.accounts == null || this.account.size() == 0;
}

Затем на родительской странице или компоненте просто добавьте аналогичный атрибут к вашему дочернему компоненту Тег родительской страницы <apex:page rendered="{!hasAccounts}">

или тег родительского компонента

<apex:component rendered="{!hasAccounts}">

...