2015-01-09 4 views
1

У меня есть редактируемый тип данных, содержащий столбец «Тип данных». При редактировании этого столбца selectOneMenu используется для выбора значений «String», «Number» или «Date». Когда я вхожу в режим редактирования, столбец «Тип данных» имеет значение «String» (первый элемент списка типов данных), но я бы хотел, чтобы это текущее значение этого столбца (например, в витрине Primefaces: Click - для Например, если я нажму на первую строку и третий столбец второй таблицы, следует выбрать «Fiat», а не первый элемент selectOneMenu - «BMW», как в моем случае).SelectOneMenu значение по умолчанию в режиме редактирования

В чем может быть проблема с моим кодом?

XHTML:

<p:column headerText="Type" > 
     <p:cellEditor> 
       <f:facet name="output"> 
         <h:outputText value="#{item.dataType.code}" /> 
       </f:facet> 
       <f:facet name="input"> 
         <p:selectOneMenu value="#{item.dataType}" converter="myConverter" > 
           <f:selectItems value="#{backingBean.dataTypeList}" var="dt" itemLabel="#{dt.code}" itemValue="#{dt}" /> 
         </p:selectOneMenu> 
       </f:facet> 
     </p:cellEditor> 
</p:column> 

DataType класс:

public class DataType implements Serializable { 

    private BigDecimal id; 
    private String code; 
    private String descr; 

    // Getters+Setters. 
} 

Использование Primefaces 5.1.

Я могу получить любую дополнительную информацию.

ответ

3

При условии, что Converter реализация, определенных myConverter является properly делать свою работу, то это может произойти, если предприятие в вопросе, DataType, не имеет equals()hashCode()) должным образом выполнены.

Просто добавьте/автогенерируйте их в свой объект. Он должен, по крайней мере, выглядеть следующим образом:

@Override 
public int hashCode() { 
    return (id != null) 
     ? (getClass().hashCode() + id.hashCode()) 
     : super.hashCode(); 
} 

@Override 
public boolean equals(Object other) { 
    return (other != null && getClass() == other.getClass() && id != null) 
     ? id.equals(((DataType) other).id) 
     : (other == this); 
} 

Это также должно немедленно решить ошибку "Validation Error: Value is not valid" при отправке формы.

Все ваши сущности должны реализовывать их. Чтобы избежать повторения boileplate, подумайте о создании базового объекта, из которого простираются все ваши сущности. См. Также Implement converters for entities with Java Generics.

+0

Большое спасибо за помощь, это работает! – peterremec

+0

Добро пожаловать :) – BalusC