Primefaces: обновление после действия (-Listener) завершено - PullRequest
0 голосов
/ 14 июня 2019

Я хочу, чтобы мой p: datatable обновлялся / обновлялся после удаления записи.Удаление на стороне БД успешно.После обновления вручную запись исчезла.Но я не могу заставить p: datatable обновляться автоматически

Я уже пробовал команды ajax, проверяя порядок выполнения и различные цели обновления.

p: datatable from index.xhtml:

<h:form id="form">
        <p:dataTable id="table" var="row" value="#{mitarbeiterView.mitarbeiter}">
            <p:column headerText="ID">
                <h:outputText value="#{row.employeeId}" />
            </p:column>
            <p:column headerText="Name">
                <h:outputText value="#{row.lastname}" />
            </p:column>

            <p:column headerText="Löschen">
                <p:commandLink update=":form, :form:table" action="#{mitarbeiterService.deleteEmployee(mitarbeiterView.selectedEmployee)}" 
                        title="Löschen" styleClass="ui-icon pi pi-trash">
                    <f:setPropertyActionListener value="#{row}" target="#{mitarbeiterView.selectedEmployee}" />
                </p:commandLink>
            </p:column>
        </p:dataTable>
    </p:panelGrid>
</h:form>

MitarbeiterView.java:

@Named(value = "mitarbeiterView")
@ViewScoped
public class MitarbeiterView implements Serializable {

    private static final long serialVersionUID = 7924178697538784022L;

    private List<Employee> mitarbeiter;
    private Employee selectedEmployee;

    @PostConstruct
    public void init() {
        SessionConfig.initSession();
        mitarbeiter = Queries.findAllEmployees();
    }

    public List<Employee> getMitarbeiter() {
        return mitarbeiter;
    }

    public void setMitarbeiter(List<Employee> mitarbeiter) {
        this.mitarbeiter = mitarbeiter;
    }

    public void setSelectedEmployee(Employee selectedEmployee) {
        this.selectedEmployee = selectedEmployee;
    }

    public Employee getSelectedEmployee() {
        return selectedEmployee;
    }
}

MitarbeiterService.java``` *

@Named(value = "mitarbeiterService")
@ViewScoped
public class MitarbeiterService implements Serializable {

    private static final long serialVersionUID = -445070832052637147L;

    public void deleteEmployee(Employee mitarbeiter) {
        if (mitarbeiter != null) {
            ManageEmployees.deleteEmployee(mitarbeiter.getEmployeeId());
        }
    }

p: datatable должен обновиться сам.Удаленный сотрудник должен исчезнуть.

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Я думаю, что вы должны просто удалить selectedEmployee из вашего List<Employee> (mitarbeiter).
Вы можете выполнить запрос снова в бэкэнде после удаления или просто удалить selectedEmployee из своего списка.Вы должны сделать это в методе deleteEmployee

Я думаю, что deleteEmployee должно быть в MitarbeiterView ManageBean.Если вы поместите deleteEmployee в MitarbeiterView ManageBean, вы можете сделать что-то вроде этого:

public void deleteEmployee(Employee mitarbeiter) {
    if (mitarbeiter != null) {
        ManageEmployees.deleteEmployee(mitarbeiter.getEmployeeId());
        mitarbeiter = Queries.findAllEmployees();
    }
}
0 голосов
/ 14 июня 2019

Хорошо, новый ответ.Редактор комментариев выглядит просто потертым.

Спасибо, это сработало.Метод удаления теперь выглядит следующим образом:

    public void deleteEmployee(Employee mitarbeiter, MitarbeiterView view) {
        if (mitarbeiter != null) {
            ManageEmployees.deleteEmployee(mitarbeiter.getEmployeeId());

            view.setMitarbeiter(Queries.findAllEmployees());
        }
    }

и столбец p:

            <p:column headerText="Löschen">
                <p:commandLink update=":form, :form:table" action="#{mitarbeiterService.deleteEmployee(row, mitarbeiterView)}" 
                        title="Löschen" styleClass="ui-icon pi pi-trash"/>
            </p:column>

Забыл, что я не работаю с живыми сущностями.Происходит, когда пожизненный разработчик BACKend должен спроектировать FRONTend;)

Обновление: код будет выглядеть лучше, если я добавлю метод init, привязывающий MitarbeiterView к статической переменной.Переход к методу просто грязный и безобразный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...