首页 > 解决方案 > onRowSelect 用新数据更新第二个惰性 p:datatable

问题描述

我希望有人能给我一些关于我的问题的提示。我有<p:dataTable>两个lazy load。在第一个<p:dataTable>用户可以选择行。根据选择的行,第二个<p:dataTable>必须用新的惰性数据(lazyModel2)更新。

我不知道如何在行选择中获取新数据lazyModel2并使用新数据更新第二个。事件正在运行,我可以获得 selectedRow 数据。<p:dataTable>onRowSelect

我只是不知道如何lazyModel2onRowSelect()方法中获得新的东西。

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;
    }

标签: jsfprimefaceslazy-loading

解决方案


推荐阅读