Dorado 5 : 6.Dorado中自定义组件的方法 (T36)

下载

Dorado中自定义组件的方法 v0.1.doc

目录

1.概述
2.组件定义
2.1 扩展Dorado现有组件
2.2.添加一个新的组件



1.概述

Dorado有良好的扩展性,我们除了可以使用Dorado本身提供的一些组件以外,我们还可以根据自己的应用需求做出我们自己的Dorado组件。
自定义组件主要分两个内容,一个是扩展Dorado现有的组件;另一个是在Dorado中加一个全新的组件。两种方法都比较简单,我们只需要遵循特定的规则就可以完成自定义工作。下面我们就分别针对两种定义方式分别进行介绍。

2.组件定义

Dorado中的组件分为在页面中可见和不可见两种,对于可见的组件我们除了去定义组件本身外还要去考虑定义的它的Outputter,也就是该组件如何在页面中输出。如果你的组件是扩展自Dorado现有组件,那么这个Outputter可以采用原来的。

2.1 扩展Dorado现有组件

扩展现有组件比较简单,只需定义扩展的组件就可以了,而不用去考虑它的Outputter。在Dorado当中,所有的组件我们都可以去扩展它,比如DataTable、AutoForm、Button、Command等。当然对于Command之类在页面中不可见的组件来说,我们在扩展时就不用去考虑它的Outputter。在这里我们就以扩展AutoForm为例来简要说明一下扩展Dorado现有组件的步骤。
第一步我们需要定义一个扩展自com.bstek.dorado.view.control.autoform.AutoForm的类名为TestAutoForm,这里我们选择覆盖父类的generateDefaultElements方法,当然也可以根据需要覆盖其它方法,代码如下:

public class TestAutoForm extends AutoForm {

public TestAutoForm (ViewModel arg0, String arg1) {
super(arg0, arg1);
}

public void generateDefaultElements() {
//具体的业务代码
}
}


我们的组件类定义好了之后,接下来我们需要把该组件加到Dorado Studio IDE里来。打开Dorado Studio IDE,打开sutdio/configs/user-view-rules.xml文件(如果没有请在该目录下创建一个),添加如果代码:

<rule name="Controls" expanded="true" showDetail="false">
<children>
<child name="Control-TestAutoForm" insertable="true" defaultNamePrefix="testAutoform"/>
</children>
</rule>

<rule name="Control- TestAutoForm " text=" TestAutoForm " tagName="Control" object="test.TestAutoForm" nameAttribute="id" editable="true" icon="view/autoform.png">
<properties>
<property name="type" visible="false" defaultValue="TestAutoForm"/>
<property name="id" required="true"/>
<property name="layout" optionsFixed="true" options="horizontal;vertical"/>
<property name="groupType" optionsFixed="true" options="groupbox,subwindow"/>
</properties>
<children>
<child name="FormGroup" insertable="true" defaultNamePrefix="group"/>
</children>
<functions>
<function text="Auto create elements" icon="view/create-element.png" clazz="com.bstek.designer.impl.view.AutoFormCreateElementFunction"/>
</functions>
</rule>


重启IDE,打开任意一个ViewModel,我们会发现在左边的工具条上多了一个AutoFom的图标。
为了使我们新增的这个AutoForm可以在Dorado工程里使用,我们必须在我们Dorado工程里添加一些配置信息。
打开Dorado工程的home/ controls.xml文件(如果您的目录下没有,请创建一个新的),添加下列代码:

<?xml version="1.0" encoding="UTF-8"?>
<controls>
<control type="TestAutoForm" clazz="test. TestAutoForm "/>
</controls>


打开Dorado工程下home/ outputters.xml文件,添加下列代码:

<?xml version="1.0" encoding="UTF-8"?>
<elements>
<element clazz="test.TestAutoForm">
<outputter type="smartweb2" clazz=" com.bstek.dorado.view.smartweb.v2.output.AutoFormOutputter "/>
</element>
</elements>


最后一步,在我们的JSP里面要使用我们的TestAutoForm,标签需要采用如下方式进行定义:

<d:Controls id="testAutoFormId" type="TestAutoForm"/>


到这里为止,我们的AutoForm的扩展工作就结束啦,同时有一点需要注意一下,为了方便我们对Studio的调试,可以打开Studio安装目录/studio/ debug.bat来启动Studio,这样一旦我们配置过程中有什么错误可以控制台查看到,可以帮助我们快速的修正错误。
上面我们扩展的是AutoForm,因为AutoForm要在页面上显示,所以我们必须为其加上Outputter,如果我们扩展的是一个不用在页面上显示的组件(比如Command等),那就不需要为其加Outputter了,上面的"打开Dorado工程下home/ outputters.xml文件"这一步就可以省下了。下面的代码就是扩展了com.bstek.dorado.view.control.command.UpdateCommand,它实现的功能很简单,就是加几个属性而已,代码如下:

public class TestCommand extends UpdateCommand{
private String jasperFile;
private String reportType;
private String dataSource;
public String getReportType() {
return reportType;
}
public void setReportType(String reportType) {
this.reportType = reportType;
this.parameters().setString("_reportType", reportType);
}
public String getJasperFile() {
return jasperFile;
}
public void setJasperFile(String jasperFile) {
this.parameters().setString("_jasperFile", jasperFile);
this.jasperFile = jasperFile;
}
public TestCommand(ViewModel arg0, String arg1) {
super(arg0, arg1);
super.setAction("/aaa.servlet");
}

public String getDataSource() {
return dataSource;
}
public void setDataSource(String dataSource) {
this.parameters().setString("_dataSource", dataSource);
this.dataSource = dataSource;
}
}

这个扩展的command在做好之后还是像配置TestAutoForm一样进行配置,但其中的Outputter的配置就不用了,因为command不需要在页面输出。

2.2.添加一个新的组件

添加新的组件和前面扩展Dorado现有组件类似,很多配置基本上都是一样的。唯一不同的地方是我们需要为我们自己写的组件再添加一个Outputter类,以解决它在页面上如何输出问题。下面我们就以一个实例来演示一下具体的开发步骤。
对于自己定义的控件,请扩展com.bstek.dorado.view.control.PlaceableControl类,如下面的代码:

public abstract class MyControl extends PlaceableControl implements java.io.Serializable{
private String title;

public AbstractChart(ViewModel arg0, String arg1) {
super(arg0, arg1);
}

public void setTitle(String title) {
this.title = title;
}


public String getTitleColor() {
return titleColor;
}
}

上面的MyControl比较简单,只是添加了一个属性而已,我们可以根据自己的需要添加实际业务代码。
控件类写完之后,我们接下来要为其写一个Outputter,我们的Outputter扩展自com.bstek.dorado.view.smartweb.v2.output.AbstractPlaceableControlOutputter,以使其可以在页面中输出,我们的Outputter类代码如下:

public class TestOutputter extends AbstractPlaceableControlOutputter {
public void doOutputStartSection(Writer out, Object object,
ServletRequest request) throws Exception {
if (object instanceof MyControl) {
MyControl control=( MyControl)object;
//具体的业务代码......
}
}}


接下来和配置AutoForm一样在我们的Strdio里配置好该组件,在我们的Project里配置好该组件,就可以使用啦。

Attachments: