JSFからコンポジットキーにアクセスするときに到達できないターゲット

StackOverflow https://stackoverflow.com/questions/3454324

質問

私の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();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top