Как передавать объекты с одной страницы на другую в JSF без написания конвертера

Прежде всего извините за мой английский. У меня есть две страницы в JSF2, одна для перечисления пассажиров и другая для создания / обновления пассажиров. У меня также есть два компонента @ViewScoped, один со списком пассажиров и один для удержания на странице B выбранного пассажира. Я вижу способы пропустить пассажира через viewParam или @ManagedProperty, но я не хочу писать конвертер.

Что я хочу знать, если есть способ передать объект со страницы A на страницу B без передачи идентификатора пассажира и написать конвертер или без передачи идентификатора, а затем перейти к БД для поиска пассажира. Что я делаю и работаю, так это следующее. Я устанавливаю во флеш-область с помощью setPropertyActionListener выделенный объект и перехожу к pageB, в @PostConstruct viewScopedBean я получаю flashScope и извлекаю объект. Как я уже сказал, это работает, но я не знаю, правильно ли это. Вот кодовая страница A:

<p:column width="10" style="text-align: center;">                    
    <p:commandButton icon="ui-icon-pencil" action="editClientes?faces-redirect=true">                         
        <f:setPropertyActionListener target="#{flash.pax}" value="#{row}"/> 
     </p:commandButton>
</p:column>

@PostConstruct из bean-компонента pageB

@PostConstruct
private void initBean(){          
    this.pax = (Passenger) JSFUtils.getFlashScope().get("pax"); 
    if(this.pax == null){
        this.pax = new Passenger();
    }           
}

Это правильно, или правильно написать конвертер? Благодарю.

1 ответ

Решение

Зависит от того, хотите ли вы /editClientes просьба быть идемпотентным ("закладным") или нет.

Флэш-подход не идемпотентен. Невозможно связать / поделиться / добавить в закладки /editClientes URL для редактирования конкретного клиента. Когда конечный пользователь копирует этот URL-адрес для совместного использования / закладки и повторно выполняет запрос к нему (даже если он просто нажимает [enter] в адресной строке браузера), все, с чем сталкивается конечный пользователь, - это пустая форма редактирования для нового клиента вместо один конечный пользователь, изначально выбранный через область видимости flash.

Подход параметра запроса идемпотентен. Конечный пользователь может получить точно такой же ответ каждый раз, когда он повторно выполняет запрос.

Это не наше решение, если ваш /editClientes страница должна быть идемпотентной или нет. Это ваше.

Смотрите также:

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