2012-06-17 3 views
0

У меня есть очень простой Xhtml файл где panelGroup содержащий commandButton добавляется на страницу, нажав кнопку переключения, но это динамически добавляемые commandButton не выполняет его actionlistener на время нажатия.CommandButton внутри динамически визуализации panelGroup не выполняет ActionListener

Полный код ниже:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 

    <h:head> 
    </h:head> 
    <h:body> 
     <h:panelGroup id="checkDyna"> 
      <h:panelGroup rendered="#{listRetriever.booleanStatus}" > 
       <h:form>    
        <p:commandButton value="check" process="@all" actionListener="#{listRetriever.xx()}"/> 
       </h:form> 
      </h:panelGroup> 
     </h:panelGroup> 
     <h:form> 
      <p:commandButton value="Toggle" actionListener="#{listRetriever.toggleBooleanStatus()}" update=":checkDyna"/> 
     </h:form> 

    </h:body> 
</html> 

Bean

@ManagedBean(name = "listRetriever") 
@RequestScoped 
public class ListRetriever implements Serializable { 

    private boolean booleanStatus;   

    public void toggleBooleanStatus(){ 
     if (!booleanStatus) 
      booleanStatus=true; 
    } 

    public void xx(){ 
     System.out.println("Invoked***"); 
    } 

    public boolean isBooleanStatus() { 
     return booleanStatus; 
    } 

    public void setBooleanStatus(boolean booleanStatus) { 
     this.booleanStatus = booleanStatus; 
    } 

} 

При удалении rendered="#{listRetriever.booleanStatus}" ActionListener успешно вызывается.

При изготовлении бобов ViewScoped проблема устранена, но я не хочу, чтобы она была шире, чем RequestScoped.

+0

Возможный дубликат [h: commandLink/h: commandButton не вызывается] (http://stackoverflow.com/questions/2118656/hcommandlink-hcommandbutton-is-not-being-invoked) – BalusC

ответ

0

Я имел эту p:commandButton в пределах условно оказанной панели, чья условное выражение для рендеринга был вычисляемым в ложную в то время как я пытался выполнить actionlistener. Это было причиной отсутствия actionlistener.

+1

Я думал, что вы уже знайте это. Это достаточно очевидно, так как размещение компонента в области обзора решает проблему. Кажется, что ваш единственный вопрос сводился к тому, как его достичь, без использования области обзора. – BalusC

+0

Да, я понял, что после проверки с помощью @viewscoped и просмотра вашего ответа на вопрос: [h: commandLink/h: commandButton не вызывается] (http://stackoverflow.com/questions/2118656/hcommandlink-hcommandbutton-is- не-бытие вызывается). Спасибо вам за этот замечательный ответ! –

Смежные вопросы