Как получить данные из базы данных при использовании h: link и h: button в методе JSF GET - PullRequest
1 голос
/ 15 ноября 2011

У меня простое приложение с одной сущностью. Сущность - это Автомобиль, поэтому я создал методы CRUD и метод "получить все автомобили". Я использую JSF, чтобы создать веб-сайт, на котором у меня есть список автомобилей со ссылкой редактирования / показа / удаления рядом с ним. Вместо того, чтобы использовать POST, я хочу использовать GET для ссылок показа / редактирования. До сих пор я использовал h: ссылку с идентификатором в качестве параметра, и я установил их на странице показа как viewParams.

Все приложение работает, но у меня есть вопрос. В настоящее время я выполняю EJB-вызов, который находит подходящий автомобиль по идентификатору в set-методе для идентификатора автомобиля в компоненте поддержки. Я не нашел другого способа сделать это, поэтому мне интересно, если это правильно? Потому что у меня нет метода действия, который вызывается так же, как h: commandButton, и возвращает строку для страницы, к которой он должен перейти.

1 Ответ

2 голосов
/ 15 ноября 2011

Вы можете использовать <f:event type="preRenderView"> для запуска действия представления перед его отображением.

Например,

<f:metadata>
    <f:viewParam name="id" value="#{cars.id}" />
    <f:event type="preRenderView" listener="#{cars.init}" />
</f:metadata>

с

@ManagedBean
@ViewScoped
public class Cars {

    private Long id;
    private Car car;

    @EJB
    private CarService service;

    public void init() {
        car = service.find(id);
    }

    // ...
}

Обратите внимание, что в следующей JSF 2.2 <f:event type="preRenderView"> может быть заменен новым <f:viewAction>, который более самодокументирован:

<f:metadata>
    <f:viewParam name="id" value="#{cars.id}" />
    <f:viewAction action="#{cars.init}" />
</f:metadata>

См. Также:

...