Frage

In meinem JSF Ich habe

<h:outputLabel value="Group:" for="group" />
<h:inputText id="group" value="#{newUserController.group.groupKey.groupId}" title="Group Id" />

Group.java

@Entity
public class Group {

    @EmbeddedId
    private GroupKey groupKey;

    @ManyToOne
    @JoinColumn(name="userId")
    private User user;
    //setter, getter, constructors, equals and hashes
}

GroupKey.java

@Embeddable
public class GroupKey {

    @Column(name="userId", insertable=false, updatable=false)
    private String userId;

    private String groupId;
    //setter, getter, constructors, equals and hashes
}

Also, wenn ich versuche, das Objekt zu beharren, es gib mir diesen Fehler

value="#{newUserController.group.groupKey.groupId}": Target Unreachable, 'null' returned null

Bearbeiten
Hier ist der Inhalt meines Managed Bean.

@ManagedBean(name="newUserController") 
@RequestScoped
public class NewUserController {

    private User user = new User();

    private Group group = new Group();    

    @EJB
    DocumentSBean sBean;

    public void createNewUser(){
        user.addGroup(group);
        sBean.persist(user);
    }
}
War es hilfreich?

Lösung

Entweder #{newUserController.group} oder #{newUserController.group.groupKey} zurück null. JSF wird die letzte Eigenschaft (das ist groupId in diesem Fall) nur dann gesetzt. Wenn dies eine Vorlage Entität ist, müssen Sie / Preset, um einen Standard-und Nicht-Null-Wert für group und / oder groupKey. Sie können dies in beispielsweise tun, um die (post) Konstruktor der Bohne. Wenn dies eine bestehende Einheit ist, müssen Sie sicherstellen, dass diese Eigenschaften durch JPA richtig vorbelegt.

Andere Tipps

Ich löste es durch das Hinzufügen

 @PostConstruct
   public void init(){
     groupKey=new GroupKey();
 }

zur Gruppe Klasse, wird es initialisiert und es wird nicht null zurück.

Die PostConstruct hat für mich nicht (aber ich bin ein Neuling so nehmen, dass für das, was es wert ist). Es ist jedoch zu dem Entity-Klasse Konstruktor hinzugefügt hat.

public Group() {
   this.groupKey=new GroupKey();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top