Как передать объект между разными страницами и beas в JSF?

Я сталкиваюсь с некоторыми проблемами при использовании bean-компонентов и страниц с JSF, когда мне нужно передать объект между двумя разными bean-компонентами/страницами. Идея состоит в том, чтобы иметь страницу, на которой у меня есть список всех заказов, с возможностью нажать на кнопку редактирования, чтобы отредактировать его или создать новый. Итак, это часть orders.xhtml, где есть dataTable внутри формы:

<p:column style = "width:32px;text-align: center">
                            <p:commandButton icon = "ui-icon-edit" title = "View"
                                action = "#{createOrderSelectionView.onEditProductionOrder(productionOrder)}">
                                <f:param name = "productionOrder" value = "#{productionOrder.pk}"></f:param>
                            </p:commandButton>

И это часть для создания нового:

f:facet name = "left">
                            <p:button value = "Nuova bolla" icon = "ui-icon-plus"
                                outcome = "#{createOrderSelectionView.onNewProductionOrder()}" />
                        </f:facet>

Это целевые бобы:

    @Named
@RequestScoped
public class CreateOrderSelectionView implements Serializable {

    @Inject
    CompanyController companyController;
    @Inject
    MachineController machineController;
    @Inject
    ProductionOrderController productionOrderController;

    private ProductionOrder productionOrder;
    private DualListModel<Machine> machines;

    @PostConstruct
    public void init() {
        System.out.println(productionOrder == null);
        productionOrder = new ProductionOrder();
        List<Machine> machinesSource = machineController.getAllMachines();
        List<Machine> machinesTarget = new ArrayList<Machine>();
        machines = new DualListModel<Machine>(machinesSource, machinesTarget);
    }

    public String onCompletedSave() {
        productionOrder.setMachines(machines.getTarget());
        productionOrderController.store(productionOrder);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                "La bolla n° " + productionOrder.getOrderNumber() + " è stata correttamente salvata.", null));
        FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
        productionOrder = null;
        return "orders?faces-redirect=true";
    }

    public ProductionOrder getProductionOrder() {
        return productionOrder;
    }

    public void setProductionOrder(ProductionOrder productionOrder) {
        this.productionOrder = productionOrder;
    }

    public String onNewProductionOrder() {
        this.productionOrder = new ProductionOrder();
        productionOrder.setCompany(new Company());
        List<Machine> machinesSource = machineController.getAllMachines();
        List<Machine> machinesTarget = new ArrayList<Machine>();
        machines = new DualListModel<Machine>(machinesSource, machinesTarget);
        return "createProductionOrder?faces-redirect=true";
    }

    public String onEditProductionOrder(ProductionOrder productionOrder) {
        this.productionOrder = productionOrderController.findProductionOrderByPk(productionOrder);
        List<Machine> machinesSource = new ArrayList<>();
        List<Machine> machinesTarget = productionOrder.getMachines();
        System.out.println(machinesTarget.size());
        for (Machine machine : machineController.getAllMachines()) {
            boolean found = false;
            for (Machine machine2 : machinesTarget) {
                if (machine.getPk().equals(machine2.getPk())) {
                    found = true;
                }
            }
            if (!found) {
                machinesSource.add(machine);
            }
        }

        machines = new DualListModel<Machine>(machinesSource, machinesTarget);
        return "createProductionOrder";
    }

    public DualListModel<Machine> getMachines() {
        return machines;
    }

    public void setMachines(DualListModel<Machine> machines) {
        this.machines = machines;
    }

    public List<ShoeSizeAndQuantity> getShoeSizeAndQuantities() {
        /*
         * if (productionOrder.getShoeSizeAndQuantities() == null) {
         * List<ShoeSizeAndQuantity> shoeSizeAndQuantities = new ArrayList<>(); for (int
         * i = 38; i <= 47; i++) { shoeSizeAndQuantities.add(new
         * ShoeSizeAndQuantity(String.valueOf(i), productionOrder));
         * shoeSizeAndQuantities.add(new ShoeSizeAndQuantity(String.valueOf(i + 0.5),
         * productionOrder)); }
         * productionOrder.setShoeSizeAndQuantities(shoeSizeAndQuantities); } return
         * productionOrder.getShoeSizeAndQuantities();
         */
        return new ArrayList<>();
    }

    public void setShoeSizeAndQuantities(List<ShoeSizeAndQuantity> shoeSizeAndQuantities) {
        productionOrder.setShoeSizeAndQuantities(shoeSizeAndQuantities);
    }

    public List<Company> completeTextCompany(String query) {
        String lower = query.toLowerCase();
        List<Company> companies = companyController.getAllClients();
        List<Company> result = new ArrayList<>();
        for (Company company : companies) {
            if (company.getName().toLowerCase().startsWith(lower) || company.getVatNumber().startsWith(lower)) {
                result.add(company);
            }
        }
        return result;
    }

    public boolean canDelete() {
        return productionOrder != null && productionOrder.getPk() != null;
    }

    public String remove() {
        System.out.println(productionOrder.getPk());
        productionOrderController.remove(productionOrder);
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_INFO,
                        "La bolla n° " + productionOrder.getOrderNumber() + " è stata eliminata correttamente.",
                        "Bolla cancellata!"));
        productionOrder = null;
        return "orders?faces-redirect=true";
    }

}

Проблема в том, что без перенаправления я не могу передать данные новым компонентам. Что-то не так с моими кодами?

Проверить google.com/…

Kukeltje 18.01.2019 13:02

Спасибо за ваш комментарий, но он мне не помогает! Я прочитал много статей и изучил область, но на что вы мне намекаете, так это на использование SessionScopped, тогда как я хочу использовать @RequestScoped, если это возможно.

I love coding 18.01.2019 15:14

Это не то, что есть в дубликатах. Решения без sessionscoped тоже.

Kukeltje 21.01.2019 11:57

Не могли бы вы предоставить решение / подсказку, чтобы решить мою проблему?

I love coding 21.01.2019 21:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
35
0

Другие вопросы по теме