Conversion Error setting value for 'null Converter' - Why do I need a Converter in JSF?

后端 未结 2 597
南笙
南笙 2020-11-21 15:32

I have problems understanding how to use selection in JSF 2 with POJO/entity effectively. For example, I\'m trying to select a Warehouse entity via the below dr

2条回答
  •  庸人自扰
    2020-11-21 16:11

    Example of JSF generic converter with ABaseEntity and identifier:

    ABaseEntity.java

    public abstract class ABaseEntity implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        public abstract Long getIdentifier();
    }
    

    SelectItemToEntityConverter.java

    @FacesConverter(value = "SelectItemToEntityConverter")
    public class SelectItemToEntityConverter implements Converter {
    
        @Override
        public Object getAsObject(FacesContext ctx, UIComponent comp, String value) {
            Object o = null;
            if (!(value == null || value.isEmpty())) {
                o = this.getSelectedItemAsEntity(comp, value);
            }
            return o;
        }
    
        @Override
        public String getAsString(FacesContext ctx, UIComponent comp, Object value) {
            String s = "";
            if (value != null) {
                s = ((ABaseEntity) value).getIdentifier().toString();
            }
            return s;
        }
    
        private ABaseEntity getSelectedItemAsEntity(UIComponent comp, String value) {
            ABaseEntity item = null;
    
            List selectItems = null;
            for (UIComponent uic : comp.getChildren()) {
                if (uic instanceof UISelectItems) {
                    Long itemId = Long.valueOf(value);
                    selectItems = (List) ((UISelectItems) uic).getValue();
    
                    if (itemId != null && selectItems != null && !selectItems.isEmpty()) {
                        Predicate predicate = i -> i.getIdentifier().equals(itemId);
                        item = selectItems.stream().filter(predicate).findFirst().orElse(null);
                    }
                }
            }
    
            return item;
        }
    }
    

    And usage:

    
        
        
    
    

提交回复
热议问题