WedX - журнал о программировании и компьютерных науках

Передача данных между бинами JSF

У меня возникла проблема с передачей данных между JSF-компонентами. Я хочу, когда я вхожу в систему, передаю имя пользователя следующему компоненту, где я могу его использовать. Я нашел много вещей об этом, но я не могу заставить его работать в моем проекте. У меня есть UserService, где я могу управлять своими пользователями. Здесь есть метод getUsers (имя пользователя). Теперь я пытаюсь передать имя пользователя, чтобы получить свой пользовательский объект.

хтмл:

        <h:link outcome="changeProfile" value="Change profile">
            <f:param name="username" value="#{userBean.username}" />
        </h:link>

ИзменитьПрофилеБин:

@Component("changeProfile")
@ManagedBean
@RequestScoped
public class ChangeProfileBean implements Serializable {

private UserService userService;
private User user;

@ManagedProperty("#{param.username}")
private String username;

@PostConstruct
public void init(){
    FacesContext facesContext = FacesContext.getCurrentInstance();
    this.username = facesContext.getExternalContext().getRequestParameterMap().get("username");

    try {
        if(username != null){
            user = userService.getUser(username);
        }
    } catch (UserServiceException e) {
        e.printStackTrace();
    }
}

@Autowired
public ChangeProfileBean(UserService userService) {
    this.userService = userService;
}

Что происходит, так это то, что changeUserbean будет создан при запуске приложения. И сразу после этого запускается @PostConstruct, где имя пользователя явно равно нулю. Но когда я вызываю changeUserBean, он больше не выполняет @PostConstruct. Кто-нибудь знает, что я могу сделать?

Пользовательский компонент:

@Component("userBean")
@Scope("session")
public class UserBean implements Serializable
{
    @Autowired
    private UserService userService;

    @Autowired
    private RepairService repairService;

    private String username;
    private String password;

  • Попробуйте сделать запрос bean-компонента ограниченным. 03.01.2014
  • Все тот же результат.. 03.01.2014
  • Можете ли вы опубликовать код для обоих бобов? Я мало что знаю о весне, но вы уверены, что @Autowired используется именно так? 03.01.2014
  • Я тоже не уверен. Я начинаю учиться работать с JSF.. Это для проекта в школе.. Если вы знаете, как его использовать, скажите, пожалуйста, потому что я не знаю :) 03.01.2014
  • Можете ли вы опубликовать код для changeProfileBean, пожалуйста? 03.01.2014
  • Это changeUserBean. Я знаю, это немного сбивает с толку, но я провел рефакторинг и обновлю его здесь. 03.01.2014
  • Перестаньте делать свои bean-компоненты как spring, так и jsf. Если вы собираетесь смешивать обе технологии, я рекомендую вам использовать JSF для уровня представления и Spring для сервисов. Использование их обоих приведет к дублированию экземпляров, где вы ничего не контролируете. 03.01.2014
  • Извините, я не знаю разницы между jsf и spring. Как я уже говорил, я все еще пытаюсь изучить этот материал. Когда управляется bean-компонент JSF, а когда — Spring? 03.01.2014
  • Зачем нужен метод постконструкции? Он всегда будет нулевым, не так ли? 03.01.2014
  • Я нашел эту ссылку. Вы можете внедрить только управляемое свойство той же или более широкой области. Так, например, введение параметров запроса в качестве управляемого свойства в bean-компонент с областью видимости (к сожалению) не будет работать. И действительно, он всегда будет нулевым. Поэтому мне было интересно, как я могу это исправить. Я также пытался сделать его сеансовым, но все еще не работал. 03.01.2014
  • Кто-нибудь? Пожалуйста? Я застрял с этой проблемой на некоторое время... 04.01.2014

Ответы:


1

Хотя у вас уже есть данные, которые вам нужны в более широком масштабе, просто добавьте этот вспомогательный компонент в changeProfileBean:

@ManagedBean
@RequestScoped
public class ChangeProfileBean implements Serializable {

    @ManagedProperty("#{userBean}")
    private UserBean userBean;

    public UserBean getUserBean(){
        return userBean;
    }
    public void setUserBean(UserBean userBean){
        this.userBean = userBean;
    }
    ...
}
04.01.2014
  • Спасибо за ответ. Хорошо, это кажется лучшим способом передачи данных. Но это не меняет того факта, что bean-компонент создается при запуске. Пользовательский компонент по-прежнему равен нулю. 04.01.2014
  • Возможно, вам следует добавить конструктор в управляемый компонент ChangeProfileBean. 18.01.2014
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]