Java Richfaces extendedDataTable位于另一个extendedDataTable内

Java Richfaces extendedDataTable位于另一个extendedDataTable内,java,jsf,richfaces,richdatatable,Java,Jsf,Richfaces,Richdatatable,因此,我有一个扩展的DataTables,因为下面的代码被缩短以保持简单 <rich:extendedDataTable value="#{package.packageList}" var="o" styleClass="listStyle" selection="#{package.selection}" selectionMode="single"> <a4j:aja

因此,我有一个扩展的DataTables,因为下面的代码被缩短以保持简单

    <rich:extendedDataTable value="#{package.packageList}" var="o"
                styleClass="listStyle" selection="#{package.selection}"
                selectionMode="single">

                <a4j:ajax execute="@form" event="selectionchange"
                    listener="#{package.selectionListener}" render=":res" />
                <rich:column>

                    <f:facet name="header">Package ID</f:facet>
                    #{o.packageID}

                </rich:column>
    </rich:extendedDataTable>
因此,当用户单击此按钮时,它会将其详细信息输出到下面的a4j:outputPanel中的另一个表中

     <a4j:outputPanel id="res">
            <rich:panel header="Selected Package"
                rendered="#{not empty package.selectionPackage}">
                </rich:panel>
      </a4j:outputPanel>
这部分是有效的。然而,这个新的细节现在包含了几个变量,还有一个我需要能够选择的对象的arrayList。所以这个arrayList生成它自己的extendedDataTable,然后我需要选择并检索它的信息。这部分就是它被破坏的地方。到目前为止,我所做的尝试如下

   <a4j:outputPanel id="res">
            <rich:panel header="Selected Package"
         rendered="#{not empty package.selectionPackage}">
                 <rich:dataTable value="#{package.selectionPackage}"
                    var="extensionTable" styleClass="listStyle" selectionMode="single">
                    <rich:column>
                        <rich:extendedDataTable value="#                                         {extensionTable.extensionList}"
                            var="selectedExtension" styleClass="listStyle" style="height:200px;"
                            selection="#{package.extensionSelection}" selectionMode="single">

                            <a4j:ajax execute="@form" event="selectionchange"
                    listener="#{package.selectionExtensionListener}" render=":extensions" />
                            <rich:column>
                                <f:facet name="header">Extension Add on list</f:facet>
                                #{selectedExtension.extensionName}"
                            </rich:column>
                        </rich:extendedDataTable>
                    </rich:column>
                </rich:dataTable>
                                   </rich:panel>
        </a4j:outputPanel>
我有另一个a4j面板来处理新选择的对象。问题是没有调用我的selectedExtensionListener。我不知道为什么,我所尝试的甚至是可能的。当行改变颜色时,选择正在工作,但是永远不会调用selectionExtensionListener。我有一些system.out.printlnt只是为了检查,而第一个侦听器被调用,第二个则没有。如果这是显而易见的,或者甚至不可能的话,请原谅我,但我对jsf比较陌生。任何帮助都将不胜感激

我将在下面复制并粘贴我的bean,向您展示代码的后端。我将排除声明我的所有变量和填充我的列表和对象等,因为这只会阻塞代码,如果您需要它们,请告诉我,我将在中编辑它们。很抱歉格式化,我不知道您是否可以在这里格式化代码

   public class Package implements Serializable{
        public void selectionListener(AjaxBehaviorEvent event) {
    System.out.println("In selection listener");
           UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();
           Object originalKey = dataTable.getRowKey();
           selectionPackage.clear();
           for (Object selectionKey : selection) {
             dataTable.setRowKey(selectionKey);
             if (dataTable.isRowAvailable()) {
                selectionPackage.add((PackageClass) dataTable.getRowData());
            }
      }
    dataTable.setRowKey(originalKey);
}
public void selectionExtensionListener(AjaxBehaviorEvent event) {
    System.out.println("Testing 1");
    UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();
    Object originalKey = dataTable.getRowKey();
    selectionExtension.clear();
    for (Object selectionKey : extensionSelection) {
        dataTable.setRowKey(selectionKey);
        if (dataTable.isRowAvailable()) {
            System.out.println("Testing 2");
            selectionExtension.add((ExtensionClass) dataTable.getRowData());
        }
    }
    dataTable.setRowKey(originalKey);
}
 public Collection<Object> getSelection() {
    return selection;
}

public void setSelection(Collection<Object> selection) {
    this.selection = selection;
}
public Collection<Object> getExtensionSelection() {
    return extensionSelection;
}

public void setExtensionSelection(Collection<Object> extensionSelection) {
    this.extensionSelection = extensionSelection;
}


public List<PackageClass> getPackageList() {
    return packageList;
}
 public void setPackageList(ArrayList<PackageClass> packageList) {
        this.packageList = packageList;
}
 public PackageClass getSelectionPackage() {
    if (selectionPackage == null || selectionPackage.isEmpty()) {
        return null;
    }
    return selectionPackage.get(0);
}
 public void setSelectionPackage(ArrayList<PackageClass> selectionPackage) {
        this.selectionPackage = selectionPackage;
}
 public ArrayList<PackageClass> getSelectionPackages() {
    return selectionPackage;
}
 public ExtensionClass getSelectionExtension() {
    if (selectionExtension == null || selectionExtension.isEmpty()) {
        return null;
    }
    return selectionExtension.get(0);
}
 public void setSelectionExtension(ArrayList<ExtensionClass> selectionExtension) {
        this.selectionExtension = selectionExtension;
}
 public ArrayList<ExtensionClass> getSelectionExtensions() {
    return selectionExtension;
}
     }

可以包含完整的xhtml模板吗?有时最终会出现不兼容,某些组件组合会出现bug。当我发现这种情况时,我通常会检查浏览器控制台以查看发送到服务器的内容。嗨,MaQay,谢谢你的回复,但我已将其修复。这是JavaBean和页面的范围问题。我将bean更改为ViewScope,并为每个extendedDataTable在页面中添加了多个表单,这修复了我遇到的问题。