Jsf 2 JSF实体转换困难

Jsf 2 JSF实体转换困难,jsf-2,jpa-2.0,facelets,ejb-3.1,converters,Jsf 2,Jpa 2.0,Facelets,Ejb 3.1,Converters,我正在开发JSF2.1(PF3.5)+EJB(3.1)+JPA(EclipseLink 2.4.1)。 在facelet上,我有一个带有输入框的表单,用于使用ajax搜索“商家”实体。 我需要搜索到的商户参考与我的“餐厅”实体关联,因为“商户”是餐厅的外键。 例如,我可以在一个表单上获取搜索到的商户值,并在另一个表单输入字段中呈现这些值。我不知道如何将这个商人参考资料沿着我在第二张表格上的另一个餐厅区域传送。就我能够访问该商户的字段而言,我认为我需要一个实体转换器,但我所做的工作不起作用。 以下

我正在开发JSF2.1(PF3.5)+EJB(3.1)+JPA(EclipseLink 2.4.1)。 在facelet上,我有一个带有输入框的表单,用于使用ajax搜索“商家”实体。 我需要搜索到的商户参考与我的“餐厅”实体关联,因为“商户”是餐厅的外键。 例如,我可以在一个表单上获取搜索到的商户值,并在另一个表单输入字段中呈现这些值。我不知道如何将这个商人参考资料沿着我在第二张表格上的另一个餐厅区域传送。就我能够访问该商户的字段而言,我认为我需要一个实体转换器,但我所做的工作不起作用。 以下为相关代码:

这是第一张表格上的搜索框:

    <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>
以及我的餐厅实体(相关部分):

@实体
@表(name=“餐厅”)
公共类扩展BaseEntity实现可序列化{
/…其他东西/
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“merchantID”)
私人商人;解决了

我在餐馆管理的bean中实现了搜索方法(我在商家管理的bean中也有搜索方法,我正在尝试使用它);信息存储在一个商家实例中,当我操作一个餐馆实例时,在持久化更改之前,我设置这个餐馆的商家(外键)。 下面是我的餐厅管理bean的相关代码

//the merchant to store values searched, used in update
private Merchant searchedMerchant;
private String searchValue;
//the correspondent restaurant-merchant, used in update, and new record
private Merchant merchant;
/**
 * @return the merchant
 */
public Merchant getMerchant() {
    return merchant;
}

/**
 * @param merchant the merchant to set
 */
public void setMerchant(Merchant merchant) {
    this.merchant = merchant;
}

/**
 * @return the searchValue
 */
public String getSearchValue() {
    return searchValue;
}

/**
 * @param searchValue the searchValue to set
 */
public void setSearchValue(String searchValue) {
    this.searchValue = searchValue;
}
/**
 * @return the searchedMerchant
 */
public Merchant getSearchedMerchant() {
    return searchedMerchant;
}

/**
 * @param searchedMerchant the searchedMerchant to set
 */
public void setSearchedMerchant(Merchant searchedMerchant) {
    this.searchedMerchant = searchedMerchant;
}
/**
 * 
 * @param actionEvent
 */
public void doUpdateRestaurant(ActionEvent actionEvent) {
    // logger.log(Level.INFO, "doUpdateUser(ActionEvent actionEvent)");
    System.out.println("doUpdateRestaurant(ActionEvent actionEvent): "
            + selectedRestaurant.toString());
    selectedRestaurant.setMerchant(searchedMerchant);<---I was missing this!
    das.update(selectedRestaurant);
}
//存储搜索值的商户,用于更新
私人商户搜索商户;
私有字符串搜索值;
//更新中使用的相应餐厅商户和新记录
私人商人;
/**
*@返回商人
*/
公共商户{
退货商户;
}
/**
*@param merchant要设置的商户
*/
公共商户(商户){
this.merchant=商户;
}
/**
*@返回搜索值
*/
公共字符串getSearchValue(){
返回搜索值;
}
/**
*@param searchValue要设置的searchValue
*/
public void setSearchValue(字符串searchValue){
this.searchValue=searchValue;
}
/**
*@返回searchedMerchant
*/
公共商户getSearchedMerchant(){
返回searchedMerchant;
}
/**
*@param searchedMerchant要设置的searchedMerchant
*/
公共作废setSearchedMerchant(商户搜索Merchant){
this.searchedMerchant=searchedMerchant;
}
/**
* 
*@param actionEvent
*/
公共无效DoUpdateRestarant(ActionEvent ActionEvent){
//logger.log(Level.INFO,“doUpdateUser(ActionEvent ActionEvent)”;
System.out.println(“doUpdateRestarant(ActionEvent)ActionEvent:”
+selectedRestarant.toString());
selectedRestaurant.setMerchant(searchedMerchant);
<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>
// 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() {
    }
}
//the merchant to store values searched, used in update
private Merchant searchedMerchant;
private String searchValue;
//the correspondent restaurant-merchant, used in update, and new record
private Merchant merchant;
/**
 * @return the merchant
 */
public Merchant getMerchant() {
    return merchant;
}

/**
 * @param merchant the merchant to set
 */
public void setMerchant(Merchant merchant) {
    this.merchant = merchant;
}

/**
 * @return the searchValue
 */
public String getSearchValue() {
    return searchValue;
}

/**
 * @param searchValue the searchValue to set
 */
public void setSearchValue(String searchValue) {
    this.searchValue = searchValue;
}
/**
 * @return the searchedMerchant
 */
public Merchant getSearchedMerchant() {
    return searchedMerchant;
}

/**
 * @param searchedMerchant the searchedMerchant to set
 */
public void setSearchedMerchant(Merchant searchedMerchant) {
    this.searchedMerchant = searchedMerchant;
}
/**
 * 
 * @param actionEvent
 */
public void doUpdateRestaurant(ActionEvent actionEvent) {
    // logger.log(Level.INFO, "doUpdateUser(ActionEvent actionEvent)");
    System.out.println("doUpdateRestaurant(ActionEvent actionEvent): "
            + selectedRestaurant.toString());
    selectedRestaurant.setMerchant(searchedMerchant);<---I was missing this!
    das.update(selectedRestaurant);
}