Ziel nicht erreichbar, wenn Zugriff auf eine Verbundschlüssel von JSF
-
27-09-2019 - |
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);
}
}
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();
}