gpt4 book ai didi

java - 具有多个 p 的行选择 :dataTable

转载 作者:行者123 更新时间:2023-12-01 05:24:21 25 4
gpt4 key购买 nike

在以下场景中,我有几个通过 ui:repeat 标记迭代构建的数据表,我经历过行监听器对于不在第一个表中的选定元素返回 null。

为了理解模型对象,我有几个菜单,每个菜单都包含几个区域。

任何帮助将不胜感激。

xhtml如下:

<ui:repeat value="#{someBean.menus}" var="menu">                

<p:dataTable var="area" value="#{menu.areas}"
rowKey="#{area.id}" selection="#{menu.area}" selectionMode="single">

<p:ajax event="rowSelect" listener="#{someBean.rowSelected}" />

<f:facet name="header">#{menu.name}</f:facet>

<p:column>
<f:facet name="header"></f:facet>
<h:outputText value="#{area.id}" />
</p:column>

<p:column>
<f:facet name="header">Area name</f:facet>
<h:outputText value="#{area.name}" />
</p:column>

</p:dataTable>

</ui:repeat>

ListDataModel java 实现:

public class Areas extends ListDataModel<Area> implements SelectableDataModel<Area>, Serializable {  

private static final long serialVersionUID = -9102592194300556930L;

public Areas() {
}

public Areas(List<Area> data) {
super(data);
}

@Override
public Area getRowData(String rowKey) {
@SuppressWarnings("unchecked")
List<Area> areas = (List<Area>)getWrappedData();
for (Area area : areas) {
if (String.valueOf(area.getId()).equals(rowKey)) {
return area;
}
}
return null;
}

@Override
public Object getRowKey(Area area) {
return area.getId();
}

}



public class Menus extends ListDataModel<Menu> implements SelectableDataModel<Menu>, Serializable {

private static final long serialVersionUID = -4079772686830676202L;

public Menus() {
}

public Menus(List<Menu> data) {
super(data);
}

@Override
public Menu getRowData(String rowKey) {
@SuppressWarnings("unchecked")
List<Menu> menus = (List<Menu>)getWrappedData();
for (Menu menu : menus) {
if (String.valueOf(menu.getId()).equals(rowKey)) {
return menu;
}
}
return null;
}

@Override
public Object getRowKey(Menu menu) {
return menu.getId();
}

}

...在 bean 中 someBean

public void rowSelected(SelectEvent event) {
Area selectedArea = (Area)event.getObject(); //This, is null for other tables except the first
System.out.println("SELECTED AREA:" + selectedArea);
//...
}

最佳答案

我很高兴向您展示解决方案:将 ui:repeat 替换为另一个 p:dataTable !!!

<p:dataTable value="#{someBean.menus}" var="menu">

<p:column>

<p:dataTable var="area" value="#{menu.areas}"
rowKey="#{area.id}" selection="#{menu.area}" selectionMode="single">

<p:ajax event="rowSelect" listener="#{someBean.rowSelected}" />

<f:facet name="header">#{menu.name}</f:facet>

<p:column>
<f:facet name="header"></f:facet>
<h:outputText value="#{area.id}" />
</p:column>

<p:column>
<f:facet name="header">Area name</f:facet>
<h:outputText value="#{area.name}" />
</p:column>

</p:dataTable>

</column>

</p:dataTable>

关于java - 具有多个 p 的行选择 :dataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9889508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com