JSF: Как обновить одну базу сессионных компонентов на другой сессионный компонент? - PullRequest
0 голосов
/ 12 ноября 2008

В настоящее время я изменяю некоторые приложения jsf. У меня есть две бобы.

  • connectionBean
  • UIBean

Когда я в первый раз устанавливаю параметры соединения в connectionBean, UIBean может прочитать информацию о моем connectionBean и отобразить правильное дерево интерфейса.

Однако, когда я пытаюсь установить параметры соединения в том же сеансе. Мой UIBean по-прежнему будет использовать предыдущую информацию о ConnectionBean.

Он будет использоваться только после того, как я аннулирую всю httpSession.

Есть ли способ заставить один сессионный компонент обновить другой сессионный компонент?

Ответы [ 3 ]

1 голос
/ 01 июня 2009

@ Phill Sacre getApplication (). createValueBinding теперь устарела. Используйте эту функцию вместо JSF 1.2. Чтобы получить свежую копию бобов.

protected Object getBackingBean( String name )
{
    FacesContext context = FacesContext.getCurrentInstance();

    Application app = context.getApplication();

    ValueExpression expression = app.getExpressionFactory().createValueExpression(context.getELContext(),
            String.format("#{%s}", name), Object.class);

    return expression.getValue(context.getELContext());
}
1 голос
/ 13 ноября 2008

Похоже, это какая-то проблема с UIBean, ссылающимся на устаревшую версию ConnectionBean. Это одна проблема с JSF - если вы заново создадите bean-компонент, JSF не будет обновлять ссылки во всех других ваших bean-компонентах.

Вы можете попробовать получить «свежую» копию ConnectionBean каждый раз. Следующий метод извлечет компонент поддержки по имени:

protected Object getBackingBean( String name )
{
    FacesContext context = FacesContext.getCurrentInstance();

    return context
            .getApplication().createValueBinding( String.format( "#{%s}", name ) ).getValue( context );
}

Не зная специфики вашего кода и того, как вы используете бины, сложно быть более конкретным!

0 голосов
/ 15 февраля 2012

Определение константы и статического метода в первом сеансе:

public class FirstBean {

public static final String MANAGED_BEAN_NAME="firstBean";

/**
 * @return current managed bean instance
 */
public static FirstBean getCurrentInstance()
{
  FacesContext context = FacesContext.getCurrentInstance();
  return (FirstBean) context.getApplication().evaluateExpressionGet(context, "#{" + FirstBean.MANAGED_BEAN_NAME + "}", TreeBean.class);
}  
...

, чем использовать во втором сеансе, как это:

...  
FirstBean firstBean = FirstBean.getCurrentInstance();  
...

Лучше было бы использовать некоторые Внедрения зависимостей , такие как JSF 2 или Spring.

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