2010-05-31 73 views
2

我在我的htmltable中有一列混合:1列是一个actionlistener,2列是动作,其他列是简单的输出。
JSF actionListener从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"/> 
.... 

我使用自定义的标签,但它是相同的行为,如果我使用默认列标签。
我注意到了一个非常奇怪的效果:当点击actionlistenercolumn时,actionevent被处理3次。如果我删除2个动作列,那么actionevent只处理一次。
的管理bean有sessionscope,豆方法:

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

控制台打印the'debug”文字的3倍。

回答

0

检查java方法中的事件(名称?)。

我想你是在整个表中增加监听器和事件。相反,您应该将它们嵌套到列声明中,将它们添加到列中。

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

<一个:listenerColumn ...是自定义标签和被实现为: 的 Rose 2010-05-31 12:10:07