Как получить в контроллере страницы Visualforce значение из контроллера пользовательского компонента?

Я пытаюсь разработать пользовательский компонент visualforce, который является средством выбора объектов. Этот настраиваемый компонент отображает пользовательский интерфейс, который помогает просматривать некоторые записи. Можно выбрать одну запись, и я хотел бы получить ее извне компонента или его контроллера.

Я просмотрел стандартную привязку Salesforce с ошибкой assignTo, она не двунаправленная...

Надеюсь, кто-нибудь может мне помочь .. Спасибо


person hrobert    schedule 23.05.2011    source источник


Ответы (3)


Вы передаете объект в компонент? Объекты передаются по ссылке, поэтому, если у вашего компонента есть атрибут, который принимает объект и что-то с ним делает, ваш внешний контроллер страницы сможет получить доступ к измененным значениям.

Если вы должны были передать объект оболочки, т.е. если ваш пользовательский интерфейс позволяет пользователю выбирать учетную запись.

Class SelectedAccount
{
  public Account theAccount {get;set;}
}

Компонент:

<apex:component controller="ComponentController">
   <apex:attribute type="SelectedAccount" name="userSelectedAccount" description="Selected Account" assignTo="{!selectedAccount}"
</apex:component>

Контроллер компонентов:

public class ComponentController
{
  public selectedAccount;

  public void ComponentController(){}

  public PageReference selectAccountFromUI(Account selected)
  {
    selectedAccount.theAccount = selected;

    return null;
  }
}

Страница с использованием компонента:

<c:MyAccountComponent userSelectedAccount="{!instanceOfSelectedAccount}"/>

Это позволит вам назначить выбранную пользователем учетную запись экземпляру объекта-оболочки, который принадлежит внешнему контроллеру. Затем вы можете ссылаться:

instanceOfSelectedAccount.theAccount

с основного контроллера Visualforce Pages.

person lnediger    schedule 23.05.2011
comment
Если вы находитесь внутри повторяющегося цикла, это тоже не работает. Мне любопытно, есть ли способ передать весь объект со страницы в компонент, чтобы компонент мог его редактировать (например, модальный диалог), и изменения отобразились на странице. - person tggagne; 13.03.2012

1 – Объявите статическую переменную во внешнем классе (может быть контроллером страницы VF)
Что-то вроде:
public static apexType myRecordOutside;
2 – Когда вы сделаете свой выбор из записей в методе внутри пользовательского компонента контроллер
Сделайте что-то вроде этого:
OutsideClass.myRecordOutside = chosenRecord; //notice that when its static you can access it without instantiating the outside class.
3- затем объявите в своей визуальной силе
<c:myCustomComponent userSelectedAccount = {!myRecordOutside}></c:myCustomComponent>
это получит myRecordOutside не из класса контроллера компонента, а из класса контроллера вне класса

Если у вас есть какие-либо вопросы по поводу части моего ответа, дайте мне знать :)

person toufik_at    schedule 23.10.2012

person    schedule
comment
Добро пожаловать в Stack Overflow! Хотя этот код может решить проблему, включая объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщение и, вероятно, приведет к большему количеству голосов. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для того, кто задает сейчас. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются. - person Dharman; 13.08.2019