2015-10-06 5 views
0

Я пытаюсь получить образцы, запускающие книгу «Java EE 7 Development with WildFly». Теперь я сталкиваюсь следующий вопрос/проблема:@Named @Produces getter не распознается с bean-discovery-mode = "annotated"

TheatreInfo.java:

@Model 
public class TheatreInfo { 
    ... 
    @Produces 
    @Named 
    public Collection<Seat> getSeats() { 
     return Lists.newArrayList(seats); 
    } 
    ... 
} 

Seat.java:

@Dependent 
@Named 
public class Seat { 
    ... 
    public String getName() { 
     return name; 
    } 
    ... 
} 

index.xhtml:

<?xml version="1.0" encoding="UTF-8" ?> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:h="http://xmlns.jcp.org/jsf/html" 
    template="/WEB-INF/templates/default.xhtml"> 
    <ui:define name="content"> 

     <h1>TicketBooker Machine</h1> 

     <h:form id="reg"> 

      <h:panelGrid columns="1" border="1" styleClass="smoke"> 

       <h:dataTable var="_seat" value="#{seats}" rendered="#{not empty seats}" styleClass="simpletablestyle"> 

        ... 

       </h:dataTable> 

      </h:panelGrid> 

     </h:form> 

    </ui:define> 
</ui:composition> 

beans.xml:

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
    version="1.1" bean-discovery-mode="all/annotated"> 
</beans> 

Это прекрасно работает - я вижу таблицу мест в своем веб-браузере - до тех пор, пока я использую bean-discovery-mode = "all" в моем beans.xml. Как только я использую bean-discovery-mode = "annotated" в моем beans.xml, я больше не вижу таблицу мест в моем браузере соответственно. Я вижу пустую таблицу, но ошибки не возникает.

В книге они используют bean-discovery-mode = "all", но я предпочитаю видеть, какие классы управляются beans, а какие нет. Чтобы использовать bean-discovery-mode = "annotated", мне пришлось добавить @Dependent для некоторых классов, но я не смог исправить проблему с помощью метода создания имен. Может ли кто-нибудь помочь?

+0

Прочитайте это http://stackoverflow.com/questions/18310388/meaning-of-bean-discovery-mode-annotated-in-cdi-1-1, это может быть полезно для вас , "* В неявном архиве CDI может управлять и вводить beans, аннотированные с типом области. *" Из http://docs.oracle.com/javaee/7/tutorial/cdi-adv001.htm#CACDCFDE –

+0

Благодарим вас за эта почта. Я думаю, что моя проблема заключается в том, что возвращаемый тип моего метода-производителя - это коллекция , которую я не могу аннотировать (класс 3-й стороны) и, следовательно, который не считается инъекционным компонентом !? – Dominic

ответ

0

Хм, это работает, если я использую

@Named 
@RequestScoped 
public class TheatreInfo { 
... 

instread из

@Model 
public class TheatreInfo { 
... 

Не понимаю, почему, @Named и @RequestScoped входят в стереотипе @model !? Кто-нибудь знает?

Спасибо, Доминик

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