Java Magnolia CMS 5.7-选项组字段:未预先选择所选值

Java Magnolia CMS 5.7-选项组字段:未预先选择所选值,java,magnolia,Java,Magnolia,我在Magnolia CMS版本5.7中创建了自定义OptionGroupField,其multiselect属性为true。 当我保存可选择的选项并再次打开应用程序时,该字段呈现正确。值仍然未预选。在存储库上正确设置值。有没有人知道什么是错的。向亚历克斯问好:) 这是我的工厂课程: public class TestOptionGroupFieldFactory extends SelectFieldFactory<TestOptionGroupFieldDefinition>

我在Magnolia CMS版本5.7中创建了自定义OptionGroupField,其multiselect属性为true。 当我保存可选择的选项并再次打开应用程序时,该字段呈现正确。值仍然未预选。在存储库上正确设置值。有没有人知道什么是错的。向亚历克斯问好:)

这是我的工厂课程:

public class TestOptionGroupFieldFactory extends SelectFieldFactory<TestOptionGroupFieldDefinition> {

    private static final Logger log = LoggerFactory.getLogger(TestOptionGroupFieldFactory.class);
    private ComponentProvider componentProvider;


    @Inject
    public TestOptionGroupFieldFactory(TestOptionGroupFieldDefinition definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, ComponentProvider componentProvider) {
        super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
     this.componentProvider = componentProvider;
     definition.setOptions(this.getOptions());
   }

    protected AbstractSelect createFieldComponent() {
        super.createFieldComponent();
        this.select.setMultiSelect(true);
        //this.select.setNullSelectionAllowed(true);
        return this.select;
    }

    protected AbstractSelect createSelectionField() {
        return new OptionGroup();
    }

    public List<SelectFieldOptionDefinition> getOptions(){
     List<SelectFieldOptionDefinition> options = new ArrayList<>();
        List<Person> personen = new ArrayList<>();
        Person person1 = new Person("Klaus", "Meyer", "Schlossallee. 4", "12345 Janzweitweg");
        Person person2 = new Person("Franz", "Schmitz", "Elisenstr. 18", "98765 Posenuckel");
        Person person3 = new Person("Heinz", "Kunz", "Badstr. 1", "34567 Hintertupfingen");

        personen.add(person1);personen.add(person2);personen.add(person3);

        Set<String> assignedValues = this.getAssignedValues();
        SelectFieldOptionDefinition option;
        for(Iterator var4 = personen.iterator(); var4.hasNext(); options.add(option)){

            Person person = (Person)var4.next();

            option = new SelectFieldOptionDefinition();
            option.setLabel(person.getVorname() + " " + person.getName());
            option.setName(person.getName().toLowerCase());
            option.setValue(person.getName().toLowerCase());
            if(assignedValues.contains(person.getName().toLowerCase())){
                option.setSelected(true);
            }

        }


        return options;
    }

    private Set<String> getAssignedValues() {
        Set<String> values = new HashSet<String>();

        try {
            Node node = ((JcrNodeAdapter) item).getJcrItem();
            NodeType primaryNodeType = node.getPrimaryNodeType();
            String typeName = primaryNodeType.getName();

            if("mgnl:coupon".equals(typeName)){

                Property brandsProperty = node.getProperty("testField");
                if(brandsProperty != null && brandsProperty.isMultiple()){
                    Value[] brands = brandsProperty.getValues();

                    for(Value brand : brands){
                        values.add(brand.getString());
                    }
                }
            }
        } catch (RepositoryException e) {
            log.error("Cannot read assigned values.", e);
        }

        return values;
    }
    /**
     * Create a new Instance of {@link info.magnolia.ui.form.field.transformer.Transformer}.
     */
    @Override
    protected Transformer<?> initializeTransformer(Class<? extends Transformer<?>> transformerClass) {
        return (Transformer)this.componentProvider.newInstance(transformerClass, new Object[]{this.item, this.definition, HashSet.class, getAssignedValues(), "testField"});

    }
    private static class Person{

        private String name;
        private String vorname;
        private String strasse;
        private String adresse;

        public Person(String name, String vorname, String strasse, String adresse) {
            this.name = name;
            this.vorname = vorname;
            this.strasse = strasse;
            this.adresse = adresse;
        }


        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getVorname() {
            return vorname;
        }

        public void setVorname(String vorname) {
            this.vorname = vorname;
        }

        public String getStrasse() {
            return strasse;
        }

        public void setStrasse(String strasse) {
            this.strasse = strasse;
        }

        public String getAdresse() {
            return adresse;
        }

        public void setAdresse(String adresse) {
            this.adresse = adresse;
        }
    }
}
公共类TestOptionGroupFieldFactory扩展了SelectFieldFactory{
私有静态最终记录器log=LoggerFactory.getLogger(TestOptionGroupFieldFactory.class);
私有组件提供者组件提供者;
@注入
公共TestOptionGroupFieldFactory(TestOptionGroupFieldDefinition定义、项相关字段项、UiContext UiContext、I18NAuthoringSupport、I18NAuthoringSupport、ComponentProvider ComponentProvider){
super(定义、相关字段项、uiContext、i18nAuthoringSupport);
this.componentProvider=componentProvider;
definition.setOptions(this.getOptions());
}
受保护的抽象选择createFieldComponent(){
super.createFieldComponent();
this.select.setMultiSelect(true);
//this.select.setNullSelectionLowed(true);
返回此项。选择;
}
受保护的抽象选择createSelectionField(){
返回新选项组();
}
公共列表getOptions(){
列表选项=新建ArrayList();
List personen=new ArrayList();
Person person1=新人(“克劳斯”、“梅耶”、“施洛萨利4”、“12345詹茨威特韦格”);
Person person2=新人(“弗兰兹”、“施密茨”、“Elisenstr.18”、“98765波塞努克尔”);
Person person3=新人(“Heinz”、“Kunz”、“Badstr.1”、“34567 Hintertupfingen”);
personen.add(person1);personen.add(person2);personen.add(person3);
Set assignedValues=this.getAssignedValues();
选择字段选项定义选项;
for(迭代器var4=personen.Iterator();var4.hasNext();options.add(option)){
Person=(Person)var4.next();
option=new SelectFieldOptionDefinition();
option.setLabel(person.getVorname()+“”+person.getName());
option.setName(person.getName().toLowerCase());
option.setValue(person.getName().toLowerCase());
if(assignedValues.contains(person.getName().toLowerCase())){
选项。选择设置(真);
}
}
返回选项;
}
私有集getAssignedValues(){
Set values=新的HashSet();
试一试{
Node节点=((JcrNodeAdapter)项).getJcrItem();
NodeType primaryNodeType=node.getPrimaryNodeType();
字符串typeName=primaryNodeType.getName();
如果(“mgnl:优惠券”.equals(typeName)){
Property brandsProperty=node.getProperty(“测试字段”);
if(brandsProperty!=null&&brandsProperty.isMultiple()){
Value[]brands=brandsProperty.getValues();
对于(价值品牌:品牌){
add(brand.getString());
}
}
}
}捕获(存储异常e){
日志错误(“无法读取指定的值。”,e);
}
返回值;
}
/**
*创建{@link info.magnolia.ui.form.field.transformer.transformer}的新实例。
*/
@凌驾
受保护的变压器初始化转换器(类别>变压器类别){
返回(Transformer)this.componentProvider.newInstance(transformerClass,新对象[]{this.item,this.definition,HashSet.class,getAssignedValues(),“testField”});
}
私人静态类人{
私有字符串名称;
私有字符串名称;
私人字符串街;
私人字符串地址;
公众人物(字符串名称、字符串名称、字符串strasse、字符串地址){
this.name=名称;
this.vorname=vorname;
this.strasse=strasse;
this.adrese=adrese;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getVorname(){
返回名称;
}
公共void setVorname(字符串vorname){
this.vorname=vorname;
}
公共字符串getStrasse(){
返回街;
}
公共空间设置轨道(字符串轨道){
this.strasse=strasse;
}
公共字符串getAddresse(){
返回地址;
}
公共无效设置地址(字符串地址){
this.adrese=adrese;
}
}
}