Пользовательский getEntityNameSelectList () завершается ошибкой - PullRequest
0 голосов
/ 27 июня 2009

Написание простого JSF-приложения у меня есть некоторые из следующих проблем: Мой entity entity.controller.EntityNameManager class содержит метод getEntityNameSelectList (), который я могу использовать для заполнения ComboBox. Это работает и показывает все сущности, так как метод для извлечения сущностей не имеет предложения where. Этот метод был создан автоматически.

Теперь я хочу иметь второй аналогичный метод, который фильтрует параметры на основе переменной в сеансовой области. Для этого я скопировал оригинальный метод, переименовал его в getEntityNameSelectListByUser (User theUser) и изменил метод, который запрашивает базу данных, на тот, который действительно фильтрует по UserId.

Однако при попытке загрузить страницу в браузере я получаю сообщение об ошибке, в котором говорится, что класс контроллера не имеет свойства EntityNameSelectListByUser. Я предполагаю, что, поскольку мой новый метод ожидает параметр, он не может быть найден. Есть ли способ, которым я могу сообщить ему о параметре или ИД пользователя Sessionscope?

1 Ответ

0 голосов
/ 29 июня 2009

Поддержка параметров в EL намечена для следующего технического выпуска JSR 245 (объявление здесь ; реализация здесь ).


Если вы не хотите ждать JEE6, у вас есть несколько способов преодолеть это ограничение. Эти подходы определены в терминах управляемых компонентов POJO, поэтому, при необходимости, адаптируйте их к своим EJB-компонентам.

1

Выполните поиск сеанса и вызов функции в компоненте поддержки:

  public String getFoo() {
    FacesContext context = FacesContext
        .getCurrentInstance();
    ExternalContext ext = context.getExternalContext();
    String bar = (String) ext.getSessionMap().get("bar");
    return getFoo(bar);
  }

Пример привязки:

#{paramBean.foo}

2

Используйте функцию EL (определенную в TLD, сопоставленную с общедоступным статическим методом):

  public static String getFoo(ParamBean bean, String bar) {
    return bean.getFoo(bar);
  }

Пример привязки:

#{baz:getFoo(paramBean, bar)}

3.

Подвергнуть класс Map для вызова функции (немного взломать и ограничиться одним параметром):

  public Map<String, String> getFooMap() {
    return new HashMap<String, String>() {
      @Override
      public String get(Object key) {
        return getFoo((String) key);
      }
    };
  }

Пример привязки:

#{paramBean.fooMap[bar]}
...