我试图使用一个primefaces selectManyCheckbox在我的实体中显示一个列表,但是即使它们被检索也不会检查这些值(作为一个persistentBag,因为我将我的JPA实体暴露给我的JSF页)。
我的实体:
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<>();
}
我的xhtml页面:
<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>
我的转换器:
@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();
}
}
当我调试&#34; selectedTypeContainer&#34;它的metaDataItems,所有项目都在那里,但复选框没有标记。
Primefaces 5.2