Обновление привязки компонента к bean-компоненту с областью запроса

Есть ли у кого решение такой проблемы:

В своем приложении я использую сложную программно построенную панель мониторинга на основе панели инструментов Primefaces. Чтобы преодолеть проблемы с неуникальными идентификаторами панелей, создающих панель инструментов, я привязываю этот компонент к bean-компоненту с областью запроса. Я также хотел бы перестроить панель инструментов на основе некоторых изменяемых параметров после нажатия кнопки команды.

Проблема в том, что геттер для приборной панели запускается на этапе применения значений запроса, задолго до того, как активируется actionListener команды commandButton (на этапе вызова приложения). Таким образом, несмотря на то, что панель инструментов в конечном итоге перестраивается, она не обновляется в отображаемом ответе.

С другой стороны, если я попытаюсь установить для непосредственного атрибута кнопки значение true, actionListener запустится на этапе «Применить значения запроса», но все же после геттера. Затем жизненный цикл переходит непосредственно к фазе Render Response, и результат тот же.

Любой?


Спасибо за ответ. Позвольте мне добавить немного деталей к моей проблеме.

Я храню модель спортивного турнира как свойство bean-компонента с областью действия сеанса. Это выглядит так: у бина есть свойство «турнир». Этот класс имеет список групп, каждая со своей таблицей соответствий. Идея заключалась в том, чтобы использовать три разных программно созданных компонента в качестве рендереров этой модели турнира.

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

Поскольку модель (и, следовательно, эти компоненты рендеринга) динамически строятся в зависимости от выбираемых параметров, таких как, например, количество групп, у меня возникла проблема с id uniqnes при привязке их к bean-компоненту с областью сеанса. Поэтому я привязал их к bean-компоненту с областью запроса. С каждым запросом, изменяющим модель (в основном ajax), я хотел перерисовать эти компоненты в зависимости от параметров, установленных пользователем (также сохраненных в bean-компоненте с областью действия сеанса).

Проблема в том, что когда я перестраиваю модель на этапе вызова приложения (в прослушивателе действий, запускаемом кнопкой «перестроить мою модель»), компоненты, привязанные к bean-компоненту с областью запроса, уже были «получены». из бина (или так кажется), и они не обновляются на странице.

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


person user1573280    schedule 03.08.2012    source источник
comment
Проблема решена, благодаря BalusC. Идея заключалась в том, чтобы при каждом запросе задавать новую модель компонентам, а не пытаться создавать их вручную и подставлять в коде.   -  person user1573280    schedule 06.08.2012


Ответы (1)


Проблема в том, что геттер для панели мониторинга срабатывает на этапе применения значений запроса, задолго до того, как срабатывает actionListener команды commandButton

Я не уверен, почему именно это создает проблему для вас. Возможно, вы неправильно выполняете бизнес-логику в методе получения, а не в методе прослушивания действий? Или, возможно, вы создаете компонент вручную, а не ссылаетесь на созданный JSF и, таким образом, всегда переопределяете компонент в представлении JSF?

Правильный метод получения JSF в основном выглядит так:

public UIComponent getDashboard() {
    return dashboard;
}

Он не должен не содержать другие строки кода. Кстати, то же самое относится и к методу установки. Любые действия, в которых вам нужно манипулировать дочерними элементами компонента, должны выполняться в методе действия (слушателя), а не в методе получения/установки.

person BalusC    schedule 03.08.2012