2012-07-20 2 views
1

У меня есть список элементов, которые я показываю в панели Panel, каждый элемент имеет comandButton, который вызывает действие на контроллере, проблема в том, что метод действия никогда не вызывается! Помощь?apex: commandButton inside apex: panelBar

Вот код:

<apex:panelBar id="eventBarSeller" switchType="client" items="{!relatedEventsSeller}" var="event" rendered="true"> 
    <apex:panelbarItem label="{!event.SUBJECT__c}"> 
     <apex:outputText escape="false" value="{!event.BODY__c}" /> 
     <br/> 
     <br/> 
     <apex:commandButton value="View details" action="{!showPopup}" rerender="popup" immediate="true" rendered="true"/> 
    </apex:panelBarItem> 
</apex:panelbar> 

И всплывающий outputPanel:

<apex:outputPanel id="popup"> 
     <apex:outputPanel styleClass="popupBackground" layout="block" rendered="{!displayPopup}"/> 
      <apex:outputPanel styleClass="custPopup" layout="block" rendered="{!displayPopup}"> 
       This is where I would put whatever information I needed to show to my end user.<br/><br/><br/> 
       <apex:commandButton value="Hide Pop up" action="{!closePopup}" rerender="popup"/> 
     </apex:outputPanel> 
</apex:outputPanel> 

И в контроллере Я следующее:

public boolean displayPopup {get; set;}  

public void closePopup() { 
    System.Debug(LoggingLevel.INFO, 'Close Popup...'); 
    displayPopup = false;  
} 

public void showPopup() { 
    System.Debug(LoggingLevel.INFO, 'Show Popup...'); 
    displayPopup = true; 
} 

Функция не showPopup получить не вызывается потому что я проверил журналы, что может случиться? Спасибо заранее!

ответ

0

Не уверен, экспромтом, но вы можете попробовать изменить свой switchtype от клиента к серверу или AJAX:

<apex:panelBar id="eventBarSeller" switchType="server/ajax" items="{!relatedEventsSeller}" var="event" rendered="true"> 

сервера и Аякса switchTypes может быть дробным медленнее, чем клиент, но он должен методы действия на стороне сервера процессы надежно. Этот атрибут rerender выполняется. В руководстве VF разработчика:

enter image description here

+0

Я попробовал то, что вы сказали, но не работает. Любое другое предложение? –

+0

Да - у вас есть три открытия выходных панелей и только две закрывающие выходные панели. Интересно, почему это не помешало вам сохранить ваш Visualforce в первую очередь. В противном случае попробуйте удалить немедленное значение = "true", чтобы разрешить проверку на стороне клиента до выполнения вашего кода на стороне сервера. – Adam

+0

Если это не сработает, может потребоваться опубликовать всю страницу и класс, чтобы определить, что происходит. Убедитесь, что подключен правильный контроллер, а для другого стандартного устранения неполадок потребуется больше кода. – Adam

0

Попробуйте это (работает для меня):

Страница:

<apex:form> 

    <apex:panelBar> 
     <apex:panelbarItem> 
      <apex:commandButton value="View details" action="{!showPopup}" reRender="myPopup"/> 
     </apex:panelBarItem> 
    </apex:panelbar> 

    <apex:outputPanel id="myPopup"> 
      <apex:outputPanel styleClass="popupBackground" layout="block" rendered="{!displayPopup}"> 
        Your Information Here 
      </apex:outputPanel> 
    </apex:outputPanel> 

</apex:form> 

Контроллер:

public Boolean displayPopup { get; set; } 

public PageReference showPopup() { 
    System.Debug(LoggingLevel.INFO, 'Show Popup...'); 
    displayPopup = true; 
    return null; 
}