Dorado 9 : 对象型组装控件(sample-center)

组装控件的来由

请参考配置型组装控件中的相关内容
对象型组装控件与配置型组装控件最大的不同在于控件的声明和注册,而控件使用的方法是一样的。

对象型组装控件的声明

利用组件扩展技术,我们以AutoForm为基类,扩展一个新的类QuickForm,代码如下:

package com.bstek.dorado.sample.component;

import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.bstek.dorado.annotation.ViewAttribute;
import com.bstek.dorado.config.definition.DefinitionPostProcessor;
import com.bstek.dorado.view.widget.AssembledComponent;
import com.bstek.dorado.view.widget.Control;
import com.bstek.dorado.view.widget.form.autoform.AutoForm;
import com.bstek.dorado.view.widget.form.autoform.AutoFormElement;

public class QuickForm extends AutoForm implements AssembledComponent,
        DefinitionPostProcessor {
    private String items;

    public QuickForm() {
        setCols("*");
    }

    public String getItems() {
        return items;
    }

    public void setItems(String items) {
        this.items = items;
    }


    @ViewAttribute(visible = false)
    public List<Control> getElements() {

        return super.getElements();
    }

    public void onReady() throws Exception {
        if (items != null) {
            for (String item : StringUtils.split(items, ',')) {
                if (StringUtils.isEmpty(item)) continue;
                AutoFormElement element = new AutoFormElement();
                element.setProperty(item);
                addElement(element);
            }
        }
    }

}

该对象中我们增添了新的items属性,并在onRead()方法中根据items属性动态生成AutoFormElement对象,其含义是:QuickForm可以根据用户指定的一个items字符串快速的生成一个表单。

组装控件的注册

与配置型组装控件注册方式一样,我们在dorado-home的components-context.xml中添加声明:

<bean parent="dorado.assembledComponentTypeRegister">
	<property name="name" value="QuickForm" />
	<property name="classType" value="com.bstek.dorado.sample.component.QuickForm" />
</bean>

注意,与配置型组装控件通过src方式获取控件不同,对象型组装控件通过classType获取控件出处.

组装控件的使用

定义好QuickForm控件之后,我们要通过与配置型控件相同的方式更新dorado的配置规则,这样我们就可以在IDE的视图中直接看到这个控件,并使用它:

<?xml version="1.0" encoding="UTF-8"?>
<ViewConfig>
    <View title="对象型组装控件" layout="Anchor padding:40">
        <QuickForm items="prop1,prop2,prop3,prop4,prop5" width="400" />
    </View>
</ViewConfig>

页面效果如下:

Attachments:

QuickForm.png (image/png)