jsf - onRowSelect 用新数据更新第二个惰性 p:datatable
问题描述
我希望有人能给我一些关于我的问题的提示。我有<p:dataTable>
两个lazy load
。在第一个<p:dataTable>
用户可以选择行。根据选择的行,第二个<p:dataTable>
必须用新的惰性数据(lazyModel2)更新。
我不知道如何在行选择中获取新数据lazyModel2
并使用新数据更新第二个。事件正在运行,我可以获得 selectedRow 数据。<p:dataTable>
onRowSelect
我只是不知道如何lazyModel2
从onRowSelect()
方法中获得新的东西。
XHTML
<p:dataTable id="dt1"
var="dtVar1"
value="#{controller.lazyModel1}"
lazy="true"
rowKey="#{dtVar1.recordId}"
filterEvent="enter"
sortMode="multiple"
selectionMode="single"
selection="#{controller.selected1item}">
<p:ajax event="rowSelect"listener="#{controller.onRowSelect}"update="MasterForm:dt2"/>
<p:column headerText="Text" sortBy="#{dtVar1.text}" filterBy="#{dtVar1.text}" style="width: 100px">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{dtVar1.text}"/></f:facet>
<f:facet name="input"><p:inputText value="#{dtVar1.text}"style="width: 100%"/></f:facet>
</p:cellEditor>
</p:column>
...
</p:dataTable>
<p:dataTable id="dt2"
var="dtVar2"
value="#{controller.lazyModel2}"
lazy="true"
rowKey="#{dtVar2.recordId}"
filterEvent="enter"
sortMode="multiple"
editable="true"
editMode="row">
<p:ajax event="rowEdit" listener="#{controller.onRowEdit}" update="dt2"/>
<p:column style="width: 32px">
<f:facet name="header"><h:outputText value=""/></f:facet>
<p:rowEditor/>
</p:column>
<p:column headerText="Text 2" sortBy="#{dtVar2.konto}" filterBy="#{dtVar2.konto}" style="width: 100px">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{dtVar2.konto}"/></f:facet>
<f:facet name="input"><p:inputText value="#{dtVar2.konto}" style="width: 100%"/></f:facet>
</p:cellEditor>
</p:column>
...
</p:dataTable>
控制器
@Named
@ViewScoped
public class Controller extends GenericWebController {
@Inject
private Lazy1DataModel lazyModel1;
@Inject
private Lazy2DataModel lazyModel2;
public void onRowSelect(SelectEvent event) throws SQLException {
...
filters.put("recordId", arraylistafiltera);
...
List<FPromInDto> newlazy = getLazyModel2().load(0,15,null, filters);
lazyModel2.setWrappedData(newlazy);
}
public Lazy1DataModel getLazyModel1() { return lazyModel1; }
public void setLazyModel1(Lazy1DataModel lazyModel1) { this.lazyModel1 = lazyModel1; }
public Lazy2DataModel getLazyModel2() { return lazyModel2; }
public void setLazyModel2(Lazy2DataModel lazyModel2) { this.lazyModel2 = lazyModel2; }
}
Lazy2DataModel
public class Lazy2DataModel extends LazyDataModel<SomeDto> {
@Inject
private SomeDao someDao;
@Override
public List<SomeDto> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, Object> filters) {
List<SomeDto> data = new ArrayList<>();
try {
data = someDao.lazyLoad(first, pageSize, BiLazyUtils.getSortString(multiSortMeta, SomeDto.class), BiLazyUtils.getFilterString(filters, SomeDto.class));
this.setRowCount(someDao.count(BiLazyUtils.getFilterString(filters, SomeDto.class)));
} catch (SQLException e) {
e.printStackTrace();
}
return data;
}
解决方案
推荐阅读
- symfony - 如何在共享主机上安装 Composer 以便于部署
- exception - Flutter web - 调用 http.get 抛出异常
- sql-server - 根据存储在表中的表和列信息动态构建 SQL 查询
- perl - 如何在数据数组中使用for循环
- fortran - ld:找不到-lgfortranbegin
- elasticsearch - ELK 堆栈中的新字段 - logstash
- sql - 需要有可以为任何动态给定查询生成 CSV 文件的 SSIS 包
- c# - 素数查找器 C#
- mysql - SQL 键,外键有点太锁定了
- c++ - arg 方向的“in”和“out”是什么意思?