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