onRowSelect обновить второй ленивый p: datatable с новыми данными - PullRequest
0 голосов
/ 12 декабря 2018

Надеюсь, кто-нибудь подскажет мне о моей проблеме.У меня есть два <p:dataTable>, которые имеют lazy load.На первом <p:dataTable> пользователь может выбрать строку.В соответствии с выбранной строкой вторая <p:dataTable> должна быть обновлена ​​новыми ленивыми данными (lazyModel2).

Я не знаю, как получить новую lazyModel2 и обновить вторую <p:dataTable> новыми данными в строке выбора.onRowSelect событие работает, и я могу получить данные selectedRow.

Я просто не представляю, как получить новый 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;
    }
...