如何解决Magnolia CMS 5.7-选项组字段:未预选所选值
我在magnolia CMS版本5.7中创建了具有multiselect属性ist true的自定义OptionGroupField。 当我保存可选选项并再次打开应用程序时,该字段仍正确呈现,这些值仍未预先指定。在存储库上,值设置正确。有人有什么主意吗?最好的问候亚历克斯:)
这是我的工厂班级:
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 举报,一经查实,本站将立刻删除。