Параметр URL JSF 2.0 необходим в большем объеме - PullRequest
1 голос
/ 20 января 2012

До сих пор я нашел несколько хороших ответов на подобный контент, но никогда не решал мою проблему.Я пытаюсь выполнить это наилучшим образом.

В моем приложении (JSF 2.0, работающем на Glasshfish) у меня есть список событий (назовем это EventPage).Можно щелкнуть каждое событие, чтобы затем отобразить страницу «результатов» (ResultPage), показывающую список людей, которые посетили это событие.

На EventPage ссылка сделана так:

 <h:link value="#{event.eventName}" outcome="displayResults">
     <f:param name="eventCode" value="#{event.eventCode}"/>
 </h:link>

Затем, в результате - displayResult, у меня есть такой код в моем компоненте поддержки (вдохновленный похожим):

@ManagedBean
@RequestScoped
public class DisplayResults {
    @ManagedProperty(value="#{param.eventCode}")
...

Это работает хорошо.Результаты отображаются в Datatable.Теперь я хочу умение их сортировать.Итак, я последовал этому примеру: http://www.mkyong.com/jsf2/jsf-2-datatable-sorting-example/.

Но, как только я изменил область действия своего компонента поддержки как нечто «запрос», я больше не могу использовать ManagedProperty.И поэтому я думаю, что мне нужно сослаться на что-то менее изящное, такое как:

public String getPassedParameter() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    this.passedParameter = (String) facesContext.getExternalContext().
        getRequestParameterMap().get("id");
    return this.passedParameter;
}

Также, читая на этом форуме, я разделяю мнение, что если вам придется копаться в FacesContext, вы, вероятно, делаете это неправильно.

SO: 1. Можно ли отсортировать таблицу данных без обновления представления?Только данные в вопросе?2. Есть ли другое хорошее решение для получения параметра url (или использования различных средств)?

Спасибо!

1 Ответ

2 голосов
/ 20 января 2012

Используйте <f:viewParam><f:event>) в целевом представлении вместо @ManagedProperty@PostConstruct).

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

В качестве бонуса это также обеспечивает более декларативное преобразование ипроверка без необходимости делать это в @PostConstruct.

См. также:

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