0

I'm trying to use a primefaces selectManyCheckbox to display a list in my entity, but the values are never checked even though they are retrieved (as a persistentBag since I'm exposing my JPA entities to my JSF page).

My entity:

public class TypeContainer {

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(
        name = "TYPE_CONT_META_DATA",
        joinColumns = @JoinColumn(name = "TYPE_CONT_ID", referencedColumnName = "ID"),
        inverseJoinColumns = @JoinColumn(name = "META_DATA_ID", referencedColumnName = "ID"))
    private List<MetaDataItem> metaDataItems = new ArrayList<>();

}

My xhtml page:

<p:selectManyCheckbox id="metaDataItems" value="#{adminBean.selectedTypeContainer.metaDataItems}"
                              layout="grid" columns="1" converter="metaDataItemConverter"
                              collectionType="java.util.ArrayList">
            <f:selectItems value="#{adminBean.allMetaDataItems()}"
                           var="metaDataItem"
                           itemLabel="#{metaDataItem.displayValue()}"
                           itemValue="#{metaDataItem}"/>
        </p:selectManyCheckbox>

My converter:

@FacesConverter("metaDataItemConverter")
public class MetaDataItemConverter implements Converter {

    @Inject
    private MetaDataItemRepository metaDataItemRepository;

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
        if (value == null || value.isEmpty()) {
            return null;
        }
        return metaDataItemRepository.find(MetaDataItem.class, Long.valueOf(value));

    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object object) {
        return ((MetaDataItem) object).getId().toString();
    }
}

When I'm debuggin the "selectedTypeContainer" its metaDataItems, all the items are in there but the checkboxes aren't marked.

Primefaces 5.2

GregD
  • 1,674
  • 2
  • 24
  • 49
  • 2
    Does `MetaDataItem` class have `equals()` and `hashCode()` properly implemented? I.e. selecting and submitting doesn't cause a `Validation Error: Value is not valid` error? – BalusC May 27 '16 at 15:39
  • I didn't implement the equals and hashcode. I did it and now it's working. Why is it needed actually? – GregD May 27 '16 at 15:44
  • It's needed in order to compare the selected value against the available values. – BalusC May 27 '16 at 20:28

0 Answers0