我正在开发 JSF2.1(PF3.5) + EJB(3.1) + JPA(eclipselink2.4.1)。在 facelet 上,我有一个带有输入框的表单,用于使用 ajax 搜索“Merchant”实体。我需要搜索到的商家参考与我的“餐厅”实体相关联,因为“商家”是餐厅的外键。例如,我可以在一个表单上获取搜索到的商家值并将这些值呈现在另一个表单输入字段中。我不知道如何沿着我在第二个表单上的另一个餐厅字段传输此商家参考。就我可以访问此商家上的字段而言,我认为我需要一个实体转换器,但我所做的却不起作用。下面,相关代码:
这是第一种形式的搜索框:
<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>
第二种形式,我可以从搜索的实体中访问值:
<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>
在第二种形式中,我需要关联 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>
如何通过 Managed 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,而我现在只有一个持久化实体。我需要转换器吗?我该如何解决这个问题?