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

问题描述

我在magnolia CMS版本5.7中创建了具有multiselect属性ist true的自定义OptionGroupField。 当我保存可选选项并再次打开应用程序时,该字段仍正确呈现,这些值仍未预先指定。在存储库上,值设置正确。有人有什么主意吗?最好的问候亚历克斯:)

app  components

repository

这是我的工厂班级:

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;
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)