私は JSF2.1(PF3.5) + EJB(3.1) + JPA(eclipselink2.4.1) で開発しています。facelet には、ajax を使用して「Merchant」エンティティを検索するための入力ボックスを備えたフォームがあります。「Merchant」はレストランの外部キーであるため、「Restaurant」エンティティに関連付けるには、検索されたマーチャント参照が必要です。たとえば、あるフォームで検索された Merchant の値を取得し、それらの値を別のフォームの入力フィールド内にレンダリングできます。このマーチャント参照を、この 2 番目のフォームにある別のレストラン フィールドに沿って転送する方法がわかりません。このマーチャントのフィールドにアクセスできる限り、エンティティ コンバーターが必要だと思いますが、私が行ったことは機能していません。以下、関連するコード:
これは、最初のフォームの検索ボックスです。
<p:inputText value="#{merchantMB.searchValue}" required="true"
requiredMessage="Pf associe um comerciante ao Restaurante!">
<f:ajax event="blur" listener="#{merchantMB.search}"
render="results :restaurantDetailForm:merchantFirstName:restaurantDetailForm:merchantEmail" />
</p:inputText>
検索されたエンティティから値にアクセスできる 2 番目のフォーム:
<h:outputText value="Nome Comerciante: " />
<p:inputText id="merchantFirstName"
value="#{merchantMB.searchedMerchant.firstName}" readonly="true">
</p:inputText>
<h:outputText value="Email Comerciante: " />
<p:inputText id="merchantEmail"
value="#{merchantMB.searchedMerchant.email}" readonly="true">
</p:inputText>
この 2 番目のフォームでは、searchedMerchant ID を関連付ける必要があります。この値は Restaurant エンティティへの外部キーであるためです。また、このフォームでは、次のように関連するフィールドにアクセスできます。
<h:outputText value="Nome Restaurante: " />
<p:inputText id="name"
value="#{restaurantMB.selectedRestaurant.name}" required="true"
requiredMessage="Pf introduza o nome!">
<p:watermark for="name" value="Nome" />
</p:inputText>
マネージ Bean(restaurantMB) を介してsearchedMerchantId を送信し、それを restaurantMB.selectedRestaurant.merchant.id に関連付けるにはどうすればよいですか?
ここに私のレストランMB(関連部分):
// Selected restaurant that will be updated
private Restaurant selectedRestaurant;
@PostConstruct
public void init() { //
newRestaurant = new Restaurant();
newRestaurant.setDateOfInscriptionAsRestaurant(getCurrentTimeStamp());
lazyModel = new LazyRestaurantDataModel(das);
selectedRestaurant = new Restaurant();
selectedRestaurant.setMerchant(new Merchant());
}
そして私のレストランエンティティ(関連部分):
@Entity
@Table(name = "RESTAURANTS")
public class Restaurant extends BaseEntity implements Serializable {
/...other stuff.../
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "merchantID")
private Merchant merchant; <---------THIS IS THE FK
/**
* @return the merchant
*/
public Merchant getMerchant() {
return merchant;
}
/**
* @param merchant the merchant to set
*/
public void setMerchant(Merchant merchant) {
this.merchant = merchant;
}
public Restaurant() {
}
}
Merchant エンティティに hashcode と equals があり、現在永続化されたエンティティは 1 つだけです。コンバーターは必要ですか?これをトラブルシューティングするにはどうすればよいですか?