2010-05-31 10 views
2

J'ai un mélange de colonnes dans mon htmltable: 1 colonne est un actionlistener, 2 colonnes sont des actions et d'autres colonnes sont sortie simple.
JSF actionListener est appelé plusieurs fois à partir de HtmlTable

 
<h:dataTable styleClass="table" id="orderTable" value="#{table.dataModel}" 
      var="anOrder" binding="#{table.dataTable}"          
      rows="#{table.rows}" 
    <an:listenerColumn backingBean="${orderEntry}" entity="${anOrder}" 
          actionListener="closeOrder"/>         
    <an:column label="#{msg.hdr_orderStatus}" entity="#{anOrder}" 
          propertyName="orderStatus" /> 
    <an:actionColumn backingBean="${orderEntry}" entity="${anOrder}" 
          action="editOrder" />        
    <an:actionColumn backingBean="${orderEntry}" entity="${anOrder}" 
          action="viewOrder"/> 
.... 

J'utilise des balises personnalisées, mais il est le même comportement si j'utilise les balises de colonne par défaut.
J'ai remarqué un effet très étrange: lorsque vous cliquez sur l'actionlistenercolumn, l'actionevent est traitée 3 fois. Si je supprime les deux colonnes d'action, l'événement action n'est géré qu'une seule fois.
Le haricot a réussi sessionscope, méthode de haricot:

 
    public void closeOrder(ActionEvent event) { 
     OrdersDto order; 
     if ((order = orderRow()) == null) { 
      return; 
     } 
     System.out.println("closeOrder() 1 "); 
     orderManager.closeOrder(); 
     System.out.println("closeOrder() 2 "); 
    } 

l'imprime console the'debug » texte 3 fois.

Répondre

0

Vérifiez l'événement (nom?) Dans la méthode java.

Je pense que vous ajoutez un écouteur et des événements à la table entière. Au lieu de cela, vous devez les ajouter aux colonnes en les imbriquant dans une déclaration de colonne.

<h:column> 
    <h:commandLink value="Edit" .../> 
</h:column> 
+0

Rose

Questions connexes