我正在尝试在 Magnolia CMS 中创建自定义字段。出于测试目的,我尝试了最简单的示例,并以与 TextField 相同的方式进行操作。
这是我的定义:
package info.magnolia.blossom.sample.module.ui.form.field.definition;
import info.magnolia.i18nsystem.I18nText;
import info.magnolia.ui.field.ConfiguredFieldDefinition;
import info.magnolia.ui.field.FieldType;
@FieldType("customTextField")
public class CustomTextFieldDefinition extends ConfiguredFieldDefinition<String> {
private int rows;
private int maxLength = -1;
private String placeholder;
@Inject
public CustomTextFieldDefinition() {
this.setType(String.class);
this.setFactoryClass(CustomTextFieldFactory.class);
}
@Override
public String getLabel() {
return super.getLabel() + "33";
}
@I18nText(
fallback = ""
)
public String getPlaceholder() {
return this.placeholder;
}
public int getRows() {
return this.rows;
}
public int getMaxLength() {
return this.maxLength;
}
public void setRows(int rows) {
this.rows = rows;
}
public void setMaxLength(int maxLength) {
this.maxLength = maxLength;
}
public void setPlaceholder(String placeholder) {
this.placeholder = placeholder;
}
}
这是我的工厂课程:
package info.magnolia.blossom.sample.module.ui.form.field.factory;
import com.vaadin.data.HasValue;
import com.vaadin.ui.AbstractTextField;
import com.vaadin.ui.Component;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import info.magnolia.blossom.sample.module.ui.form.field.definition.CustomTextFieldDefinition;
import info.magnolia.objectfactory.ComponentProvider;
import info.magnolia.ui.field.factory.AbstractFieldFactory;
import javax.inject.Inject;
public class CustomTextFieldFactory extends AbstractFieldFactory<String, CustomTextFieldDefinition> {
@Inject
public CustomTextFieldFactory(CustomTextFieldDefinition definition, ComponentProvider componentProvider) {
super(definition, componentProvider);
}
@Override
public HasValue<String> createField() {
return super.createField();
}
@Override
public Component createFieldComponent() {
Object field;
if (this.getDefinition().getRows() > 1) {
TextArea textArea = new TextArea();
textArea.setRows(this.getDefinition().getRows() + 10);
field = textArea;
} else {
field = new TextField();
}
if (this.getDefinition().getMaxLength() != -1) {
((AbstractTextField)field).setMaxLength(this.getDefinition().getMaxLength());
}
((AbstractTextField)field).setPlaceholder(this.getDefinition().getPlaceholder());
return (Component)field;
}
}
这是我的对话框:
form:
tabs:
- name: tabMain
fields:
- name: title
class: info.magnolia.ui.form.field.definition.TextFieldDefinition
- name: resultPage
i18n: true
class: info.magnolia.blossom.sample.module.ui.form.field.CustomTextFieldDefinition
label: Test Field
actions:
commit:
class: info.magnolia.ui.admincentral.dialog.action.SaveDialogActionDefinition
cancel:
class: info.magnolia.ui.admincentral.dialog.action.CancelDialogActionDefinition
我在控制台中没有错误。我在定义应用程序中唯一的“次要”错误是这个:
Element [info.magnolia.blossom.sample.module.ui.form.field.definition.CustomTextFieldDefinition@7e441530]
of type [info.magnolia.blossom.sample.module.ui.form.field.definition.CustomTextFieldDefinition]
may not be added to the collection of type
[interface info.magnolia.ui.form.field.definition.FieldDefinition]
Title: Source data processing problem
Path: /form/tabs/tabMain/fields/resultPage
我正在使用 Magnolia 6.2.3。
知道我错过了什么吗?
谢谢!