JSF 2.0, возвращающий нуль из методов действия, не сохраняет исходные параметры запроса - PullRequest
1 голос
/ 23 апреля 2011

У меня есть приложение JSF с определенной страницей, чтобы показать / отредактировать детали конкретной сущности в моей системе (привлекательность).У меня есть страница jsf, которая принимает атрибут AttraId в качестве параметра страницы следующим образом:

<f:metadata>
    <f:viewParam name="attractionId" value="#{attractionsBean.attractionId}" required="true" />
</f:metadata>

Чтобы отправить изменения в аттракцион, у меня есть эта командная кнопка:

<p:commandButton styleClass="button" 
                    ajax="false"
                    value="Update Attraction" 
                    action="#{attractionsBean.updateAttraction()}" />

В updateAttractionМетод, обычно в JSF, когда вы возвращаете ноль, пользователь перенаправляется на ту же страницу, показывая все сообщения, которые могли быть созданы.Тем не менее, поскольку страница требует AttraId, она выдает ошибку проверки того, что AttraId имеет значение null, поскольку она не добавляет автоматически исходный параметр запроса.Обычно я делаю это следующим образом:

if (FacesContext.getCurrentInstance().getMessageList().size() > 0) {
    return null;
}

Но это не возвращает исходные параметры для отображения указанного аттракциона.

Может кто-нибудь предложить чистое решение для этого, пожалуйста?

Спасибо !!

1 Ответ

1 голос
/ 23 апреля 2011

Вы можете добавить параметр includeViewParams=true к результату, чтобы позволить jsf impl добавить все объявленные параметры представления, но я думаю, что это может работать, только если вы также включите идентификатор представления.Вы можете попробовать что-то вроде этого:

return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?includeViewParams=true";

Или вы можете определить константу, включающую идентификатор представления в вашем управляемом компоненте:

private static final String SUCCESS = "attraction?includeViewParams=true";

...

if (FacesContext.getCurrentInstance().getMessageList().size() > 0) {
    return SUCCESS;
}

Еще несколько примеров для этого параметра можно найти по адресуэто сообщение в блоге о POST-REDIRECT-GET и JSF 2.0 .

...