Java Richfaces extendedDataTable位于另一个extendedDataTable内
因此,我有一个扩展的DataTables,因为下面的代码被缩短以保持简单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
<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在页面中添加了多个表单,这修复了我遇到的问题。