JSFからコンポジットキーにアクセスするときに到達できないターゲット
-
27-09-2019 - |
質問
私のJSFの中で私はしました
<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
}
だから私がオブジェクトを持続しようとするとき、それは私にこのエラーを与えてくれます
value="#{newUserController.group.groupKey.groupId}": Target Unreachable, 'null' returned null
編集
これが私のマネージドビーンの内容です。
@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);
}
}
解決
また #{newUserController.group}
また #{newUserController.group.groupKey}
戻ってきた null
. 。 JSFは設定するだけです 過去 プロパティ(これは groupId
この場合)。これがテンプレートエンティティの場合、デフォルトと非ヌルの値を提供/プリセットする必要があります group
および/または groupKey
. 。これは、たとえば、Beanの(ポスト)コンストラクターで行うことができます。これが既存のエンティティである場合、これらのプロパティがJPAによって適切に事前に導入されていることを確認する必要があります。
他のヒント
追加することで解決しました
@PostConstruct
public void init(){
groupKey=new GroupKey();
}
グループクラスには、初期化され、nullは返されません。
ポストコンストラクトは私のためには機能しませんでした(しかし、私は初心者なので、それが価値のあるものにそれを取ります)。ただし、エンティティクラスコンストラクターに追加しました。
public Group() {
this.groupKey=new GroupKey();
}
所属していません StackOverflow