2

私は現在、私の会社のプロジェクトの1つを開発しています。私は JSF と PrimeFaces を使用しています。プロジェクトの要件に従って、PrimeFaces SelectOneMenu を使用して、次のような従業員リストを表示します...

<p:selectOneMenu id="employee" value="#{employeeBean.employee}"
converter="employeeConverter">
    <f:selectItem itemLabel="" itemValue="" />
    <f:selectItems value="#{employeeBean.employeeList}" var="emp"
    itemLabel="#{emp.name}" itemValue="#{emp}" />
</p>

これが私のEmployeeオブジェクトのEqualsメソッドです...

@Override
public boolean equals(Object obj) {
    if (!(obj instanceOf Employee)) {
        return false;
    }
    Employee employee = (Employee) obj;
    return this.id.equals(employee.getId());
}

Employee employee = new Employee();Employee Bean init Method で従業員オブジェクトを作成すると、@PostConstruct public void init(){}で表される従業員オブジェクトthisが null になります。従業員オブジェクトを作成しなければ、すべてうまくいきます。なんで?何も思いつきません。手伝ってくれてどうもありがとう!

4

1 に答える 1

4

この行、

return this.id.equals(employee.getId());

null 安全ではありません。idisの場合でも NPE がスローされます。これは、JPA を使用して DB からインスタンスを取得するのではなく、プロパティを設定せずに演算子をnull使用して手動でエンティティ インスタンスを作成する場合に発生する可能性があります。newそれに応じて修正します。

return id != null ? id.equals(employee.id) : employee == this;

を追加することで、比較の再帰性も改善したことに注意してくださいemployee == thisの契約のequals()最初の点も参照してください。

于 2013-03-28T19:21:24.183 に答える