# Ersetzen von @ManagedBean Annotation durch @named erzeugt Fehler



## Gelöschtes Mitglied 49152 (19. Nov 2014)

In einem Java-EE6-Tutorial wird die Einführung in JSF unter anderem über eine Bean mit nur einer Property samt getter und setter erstellt, diese wird mit der @ManagedBean-Annotation versehen. 

Beim Erstellen des Projekt habe ich versehentlich EE7 eingebunden und bekam die Meldung ich solle die Annotation ändern, laut einem anderen Tutorial durch @Named ersetzen. Leider funktioniert dies nicht, auf die Property kann dann nicht mehr zugegriffen werden. Die Annotation stammt aus dem Paket javax.inject. Habe ich das falsche Paket eingebunden oder kann man die Annotation so nicht ersetzen und ich muss das Projekt mit EE6 neu erstellen ?


----------



## stg (20. Nov 2014)

beans.xml  vorhanden?
Wenn nein, dann einfach ein (leeres) File mit dem Namen im WEB-INF-folder anlegen.

Unabhängig davon kannst du natürlich auch unter EE7 einfach weiter die "alten" JSF annotationen, wie z.B. @ManagedBean verwenden..

CDI ist einfach flexibler und in vielen Belangen überlegen, daher wird meist empfohlen diese Annotations zu verwenden, wann immer möglich.


----------



## Gelöschtes Mitglied 49152 (20. Nov 2014)

Erstmal danke für die Antwort 

Die beans.xml ist vorhanden, wurde von Netbeans mit angelegt. Muss der Zugriff auf das Name-Property dann vielleicht anders als mit

```
#{user.name}"
```
 erfolgen ? Oder müssen zusätzliche Angaben gemacht werden ?


Wenn es mit dem Ändern der Annotation nicht getan ist würde ich das Thema CDI an dieser Stelle einschieben, auch wenn es im Moment vielleicht noch optional ist scheint es mir doch sinnvoller gleich es auf die Weise zu lernen die auch in Zukunft weiterhin angewendet werden kann. :rtfm:

edit - meine Javaklasse hatte das Interface Serializable nicht implementiert, nachdem ich dies geändert habe ist der Zugriff auch wieder möglich.


----------



## Gelöschtes Mitglied 49152 (21. Nov 2014)

So muss den Thread doch nochmal rauskramen - ich habe einen Fehler in der Klasse und kann ihn beim besten Willen nicht finden, die Fehlermeldung lautet 'BeanName is ambigous' und die Klasse kann nicht deployed werden. 

Die Datei- und Klassennamen  sind aber 100%ig korrekt, ich habe sie mehrfach überprüft, zumal alle anderen Klassen  aus dem Tutorialmaterial übernommen wurden und auch alle mit der Vorlage übereinstimmen . Es kommt daher nur diese Klasse in Frage:


```
@Named 
@SessionScoped 
public class GreetingManager implements Serializable {
    
    @Inject
     private Greeter service;
     private String name;
     
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getGreeting(){
        return service.sayHello(name);
    }
}
```

Greeter ist ein Interface welches als einziges die Methode sayHello definiert, diese wird von einer Klasse BigGreeter inplementiert. 
Wo ist der Fehler der das Deployment verhindert ?


----------

