Недавно у меня возникла проблема с одним из моих. У меня есть отдельный xhtml, содержащий условно отображаемые значки/ссылки для отображения разных видов всплывающих окон. Этот xhtml в основном представляет собой контейнер для определенных типов всплывающих окон, которые я могу включить на разные страницы. Представленные условия (и переданный параметр ui:) позволяют показывать только соответствующие значки/ссылки в зависимости от того, где этот xhtml включен. Это мешает мне писать много разных ui: включает на каждую страницу.JSF/EL оценивает onClick во время рендеринга страницы. Зачем?
Для некоторых всплывающих окон необходимо подготовить некоторые данные, которые выполняются с помощью атрибута onclick a4j: commandLink. Затем OnComplete покажет фактическое всплывающее окно следующим образом:
<a4j:commandLink render="clientGroupMemberInfoPopup" rendered="#{assignmentDO.clientGroupMember}"
onclick="#{clientInfoBean.registerGmClientGroupMember(assignmentDO.gmClientGroupMemberDO)}"
oncomplete="RichFaces.ui.PopupPanel.showPopupPanel('ClientInfo')">
<h:graphicImage value="/img/icons/icon_info_sm.png" rendered="#{!printFriendly}"/>
</a4j:commandLink>
Соответствующий компонент:
@ManagedBean
@ViewScoped
public class ClientInfoBean {
@EJB
private ClientService clientService;
@Getter
@Setter
private ClientContextDO clientContextDO;
@Getter
@Setter
private GmClientGroupMemberDO gmClientGroupMemberDO;
@Getter
@Setter
private Long clientId;
public void registerGmClientGroupMember(final GmClientGroupMemberDO aGroupMember) {
gmClientGroupMemberDO = aGroupMember;
clientContextDO = clientService.findByClientId(gmClientGroupMemberDO.getClientId());
}
}
В этом случае выше оказанной состояния a4j: commandLink оценивается как истина. Однако ... onclick оценивается каждый раз, на каждой странице включается этот xhtml, как только визуализируемое условие оценивается как true. Даже когда страница все еще загружается, и никто еще ничего не нажал!
Почему? И каков наилучший способ предотвратить это? Для подготовки всей информации, необходимой для всплывающего окна, есть несколько относительно тяжелых db-файлов. Я только хочу, чтобы этот материал был сделан в тот момент, когда кто-то на самом деле кликов по ссылке для всплывающего окна, а не на этапах рендеринга страницы.
Ahh на, я попытался искал подобный вопрос, но я не мог найти его либо. Во всяком случае, ваше предложение имеет смысл, и оно работает, поэтому я соглашусь с вашим собеседником! :) – Joost
Я всегда использую Google для поиска SO: 'site: stackoverflow.com search terms'. Поиск в SO похож на хромого. –
Мне, но я все еще не мог найти его. И есть еще больше «дубликатов», чем только этот. Посмотрите на улучшение дубликата Q/A, чтобы его было легче найти. – Kukeltje