2014-02-06 7 views
9

Я хотел бы, чтобы ввести постоянную строку сообщений для управляемого компонента в вебе-приложениях JSF с использованием CDI, вот класс производителя:Вводят метод производитель, который возвращает строковое КДИ

@Named 
@RequestScoped 
public class StringProducer { 

    @Produces 
    @Named("message")  
    @RequestScoped 
    public String getMessage() { 
     return "Hello World"; 
    } 
} 

и вот как он вводится в другом управляемом боб:

@Inject Named("message") String message; 

, но это всегда приводит к исключению:

org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001435 Normal scoped bean int is not proxyable 

I тр для обертывания Тип струны в этом экземпляре:

@Inject Named("message") Instance<String> message; 

но ничего не изменилось.

+0

Прошло 16 часов без каких-либо ответов .... –

+0

Не будьте настойчивыми. Никто здесь не имеет права молниеносно отвечать. Кроме того, решение вашей проблемы было в руководстве freaking. – jpangamarca

ответ

7

Проблема заключается в том, что вы используете аннотацию по методу производителя. Удалите его, и приложение будет работать как ожидалось.

Аннотации Request Scoped аннотация Фасоль под управлением контейнера. Для этого контейнер проксирует общедоступные методы объекта. Финальные классы, такие как строки, однако, не proxyable, как было отмечено, за исключением, когда работает код на Glassfish 4.0 с Weld 2.0.0 SP1:

WELD-001437 Normal scoped bean class java.lang.String is not proxyable because the type is final or it contains a final method class java.lang.String - Producer Method [String] (...etc.) 
+0

спасибо, сейчас он работает! –

4

Просто краткая информация для будущих читателей:

В дополнение к четыре встроенных в прицелы, КДИ также поддерживает два псевдо-областей:

  1. @Singleton
  2. @Dependent

и обе вышеописанные псевдообъекты имеют интересную особенность: CDI не создает для них прокси-объект.

Таким образом, все классы, которые не proxyable (например, из-за того окончательным или из-за отсутствия без аргументов общественного конструктора) могут быть помечены @Singleton или @Dependent - если, конечно, это имеет смысл.

Смежные вопросы