部分记录了我在 使用 dorado 开发当中遇到的问题,该问题列表会不断补充,也同时欢迎在评论里补充新问题。

相关网站

Dorado

Q: 想在 Spring Boot 环境下使用 dorado

A: BDF3 就是基于 Spring Boot2 的,可以在 BDF3 的基础之上开发或学习其如何把 dorado 和 Spring Boot2 集成在一起的。 https://github.com/muxiangqiu/bdf3.git

Dorado IDE

Q: 打开view 文件时"Loading Model...遇到问题"。

Widget

View

Q: 如何切换皮肤?

A:

WebConfigure.set(DoradoContext.SESSION, "view.skin", skinName);

1

2

WebConfigure.set(DoradoContext.SESSION,"view.skin",skinName);

Q: 如何在外部获取 dorado 控件?

A: 在 dorado 控件的事件内,可以通过 view.id/get 等方法来获取其它 dorado 控件。对于事件以外的地方作用域里没有 view 对象,这个时候我们可以使用 viewMain 或 $id来获取。 viewMain 其实就是 view 但是在dorado7 低版本中不支持; $id 只能通过控件 id 来选取控件,而且其返回的是dorado.ObjectGroup,我们需要通过.objects0来获取具体的控件。 $id("widgetId").objects[0]

DataSet

Q: 为什么DataProvider的代码里加载出数据,而的dataSet 中没有呢?

A: 如果开启分页,即 dataSet 中 pageSize 值大于 0, dataSet 会从 page.entities 内取值。

Q: 设置的DataProvider明明存在,为什么会提示无法在"XXXXX"类中查找到唯一匹配的"XXXX"方法?

A:如果开启分页,@DataProvider 标记的方法必须有 Pagepage 属性,其中T 为相应的 POJO 类。

Q: 为什么 DataSet刷新后中有数据,用调试器也能取出来为什么JS代码取不出来呢?

A: DataSet 的刷新有两个方法,同步与异步 flush, flushAsync。 最直白的理解使用 flush 刷新数据时,代码会等数据加载完成之后再执行后续代码;使用flushAsync刷新数据时,先处理后续代码,最后处理数据加载。 所以遇到该情况,多是使用了 flushAsync 刷新 DataSet 然后直接在下一行代码里就从 DataSet 中取数据。建议使用异步加回调的方式。

JavaScript

dataSet.flushAsync(function(){

//get data from dataSet

});

1

2

3

dataSet.flushAsync(function(){

//get data from dataSet

});

AutoForm

Q: 为什么AutoForm 的 entity 有时候是 dorado.Entity 有时候是 JavaScript Object?

A: AutoForm 绑定 dataSet 时返回的是 entity,如果没有返回的是 JavaScript Object。aufoform 一直是与 dataSet 同时出现的,如果确实不需要 dataSet,可以将 AutoForm 的 createPrivateDataSet 属性设为 true,它会自行创建一个自有 DataSet。

Q: 如何在一组输入框内,实现选择日期区间选择,如下图所示。

A: 详见DateRangeDemo.view.xml附件。

DateRangeDemo.view.xml

DataGrid

Q: 重新加载数据后,dataGrid 启用 client filter 时,dataGrid 数据为什么不更新?

A: 这个可以确认为 dorado7 的 Bug, 目前通过以下代码手动刷新 dataGrid。

JavaScript

function resetFilteredDataGrid(dataGrid){

var filterEntity = dataGrid.get("filterEntity");

var lastCriteria = filterEntity.toJSON();

filterEntity.fromJSON({});

dataGrid.filter();

setTimeout(function(){

filterEntity.fromJSON(lastCriteria);

dataGrid.filter();

}, 100);

}

1

2

3

4

5

6

7

8

9

10

functionresetFilteredDataGrid(dataGrid){

varfilterEntity=dataGrid.get("filterEntity");

varlastCriteria=filterEntity.toJSON();

filterEntity.fromJSON({});

dataGrid.filter();

setTimeout(function(){

filterEntity.fromJSON(lastCriteria);

dataGrid.filter();

},100);

}

Q: DataGrid 如何设置某些数据不能选中

在 RowSelectorColumn 的 onRenderCell 事件里,修改默认渲染动作。

var selectable = function(){

// 计算是否可选

return ;

};

if (selectable()) {

arg.processDefault = true;

} else {

jQuery(arg.dom).empty();

arg.processDefault = false;

}

1

2

3

4

5

6

7

8

9

10

11

varselectable=function(){

// 计算是否可选

return;

};

if(selectable()){

arg.processDefault=true;

}else{

jQuery(arg.dom).empty();

arg.processDefault=false;

}

Q: 如何在 DataGrid 的 Column上显示按钮?

A: 可以在 DataColumn 的 onRenderCell 事件里重写渲染方法。

jQuery(arg.dom).empty().xCreate({

tagName: "button",

content: "查看",

style: { // 定义按钮的style

color: "#1b8ce0",

"font-weight": "bold"

},

onclick: function(){ // 定义onclick事件

view.id("dialog").show();

}

});

arg.processDefault = false; // 禁止默认渲染

1

2

3

4

5

6

7

8

9

10

11

12

13

jQuery(arg.dom).empty().xCreate({

tagName:"button",

content:"查看",

style:{// 定义按钮的style

color:"#1b8ce0",

"font-weight":"bold"

},

onclick:function(){// 定义onclick事件

view.id("dialog").show();

}

});

arg.processDefault=false;// 禁止默认渲染

DownloadAction

下载控件,我用过的最难用的 dorado 控件之一,极不推荐使用。该 Action 提交是采用表单提交的方式,一旦在该 action 的后台处理上遇到异常直接就把用户页面转到 5xx 的错误页面去了。

Q: 为什么通过 DownloadAction 的方式传递到后台的代码有乱码?

A: 在web.xml中配置编解码Filter(org.springframework.web.filter.CharacterEncodingFilter). 一定要做为第一个 fitler才行。

XHTML

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

Q: 为什么通过DownloadAction 传递到后台的参数都变成 String ?

A: 对于 dorado 的绝大多数 action 控件来说,能准确的把前台赋值给 parameter 属性的值在后台转换为相应的 Java 值。但是 downloadAction 会把 parameter 的值都转换为字符串。已经习惯了把 dorado 对象直接丢到 parameter 里传到后台的,在这里肯定要踩坑。兼容方案就是在前台把要传递的值先转化为 JSON 字符串,然后把这个字符串传到后台,在后台再把字符串转回 Map。dorado 提供了工具类 dorado.JSON.stringify 来把对象转化为 JSON 字符串。

日期选择器

Q: 如何把日期选择器的默认日期改为输入框的值?

A: dorado 的日期选择框默认打开的时候都是当前时间。创建一个新的DateDropDown控件,然后在其 onCreate 事件中插入如下代码:

JavaScript

self.initDropDownBox = function(box, editor){

var dropDown = this, datePicker = dropDown.get("box.control");

if (datePicker) {

var date = editor.get("value");

var year, month;

if (typeof date == "string") {

date = new Date(date);

} else {

if (!(date instanceof Date)) {

date = new Date();

}

}

datePicker.set("date", date);

}

};

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

self.initDropDownBox=function(box,editor){

vardropDown=this,datePicker=dropDown.get("box.control");

if(datePicker){

vardate=editor.get("value");

varyear,month;

if(typeofdate=="string"){

date=newDate(date);

}else{

if(!(dateinstanceofDate)){

date=newDate();

}

}

datePicker.set("date",date);

}

};

杂项

dorado滚动条

dorado滚动条默认是窄窄的一条,只有鼠标指上去之后才会变宽。但是对于部分客户这个设定是不可以接受的。又由于 dorado 布局相关的原因,没有计划去支持实体的滚动条。只能通过调整滚动条的宽度来照顾该部分客户。 我们需要配置如下两个属性: widget.scrollerSize是默认滚动条宽度; widget.scrollerExpandedSize是展开后滚动条宽度,建议设置为 10.

JavaScript

dorado.Setting["widget.scrollerSize"]=10;

dorado.Setting["widget.scrollerExpandedSize"]=10;

1

2

dorado.Setting["widget.scrollerSize"]=10;

dorado.Setting["widget.scrollerExpandedSize"]=10;

文件下载

触发文件下载有两种方式

使用 window.location.href = "downloadUrl";

通过 iframe.

JavaScript

function downloadFile(url){

var iframeId = "iframeDownloadFile";

var iframe = document.getElementById(iframeId);

if (!iframe) {

iframe = document.createElement('iframe');

iframe.style.display = "none";

iframe.id = iframeId;

document.body.appendChild(iframe);

}

iframe.src = url;

}

1

2

3

4

5

6

7

8

9

10

11

functiondownloadFile(url){

variframeId="iframeDownloadFile";

variframe=document.getElementById(iframeId);

if(!iframe){

iframe=document.createElement('iframe');

iframe.style.display="none";

iframe.id=iframeId;

document.body.appendChild(iframe);

}

iframe.src=url;

}

文件下载Java端代码片段

Java

public void download(String filename, InputStream inputStream, HttpServletResponse response)

throws IOException {

response.setContentType("application/octet-stream");

String encodFilename = URLEncoder.encode(filename, "utf-8");

response.setHeader("Content-Disposition",

String.format("attachment; filename=\"%1$s\"; filename*=utf-8''%1$s", encodFilename));

OutputStream outputStream = null;

try {

outputStream = response.getOutputStream();

IOUtils.copy(inputStream, outputStream);

} catch (FileNotFoundException fne) {

} finally {

IOUtils.closeQuietly(inputStream);

IOUtils.closeQuietly(outputStream);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

publicvoiddownload(Stringfilename,InputStreaminputStream,HttpServletResponseresponse)

throwsIOException{

response.setContentType("application/octet-stream");

StringencodFilename=URLEncoder.encode(filename,"utf-8");

response.setHeader("Content-Disposition",

String.format("attachment; filename=\"%1$s\"; filename*=utf-8''%1$s",encodFilename));

OutputStreamoutputStream=null;

try{

outputStream=response.getOutputStream();

IOUtils.copy(inputStream,outputStream);

}catch(FileNotFoundExceptionfne){

}finally{

IOUtils.closeQuietly(inputStream);

IOUtils.closeQuietly(outputStream);

}

}

父子页面交互

在一些业务场景下,我们会需要在子页面来操作父页面的元素,或者反过来。

JavaScript

// sub page

top.doSth = function(params){

//do what you want

}

// parent page

if (jQuery.isFunction(top.doSth)){

top.doSth(datas);

}

1

2

3

4

5

6

7

8

9

// sub page

top.doSth=function(params){

//do what you want

}

// parent page

if(jQuery.isFunction(top.doSth)){

top.doSth(datas);

}

BDF2

Maven 依赖

Q: BDF2 突然不能正常启动,报NoSuchMethodError异常:

Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: com.bstek.bdf2.core.context.ContextHolder.getApplicationContext()Lorg/springframework/web/context/WebApplicationContext;

A: bdf2-orm(v2.1.0)为了兼容 Spring Boot 把ContextHolder.getApplicationContext()的返回值由WebApplicationContext改为ApplicationContext, 而 bdf2 的其它模块基本上都依赖于最新的 bdf2-orm, 导致 bdf2 的maven 项目出现不兼容的新老模块混用情况以致抛出方法未找到异常。 解决办法就是统一 bdf2 的 jar 包依赖: 1:升级其它 BDF2 模块到 2.1.0 及其以后版本; 2: 降级bdf2-orm。 Maven 项目可以通过排除依赖的bdf2-orm,然后指定bdf2-orm的版本为 2.0.7。

添加依赖:

XHTML

com.bstek.bdf2

bdf2-orm-hibernate3

2.0.7

1

2

3

4

5

com.bstek.bdf2

bdf2-orm-hibernate3

2.0.7

Home

Q: BDF2 如何通过JavaScript在首页中打开新的Tab页:

A: 在子页面调用 top.openUrlInFrameTab 方法。

window.openUrlInFrameTab(url, name, icon);

// example

window.openUrlInFrameTab("Test.d", "测试页面", "");

1

2

3

4

window.openUrlInFrameTab(url,name,icon);

// example

window.openUrlInFrameTab("Test.d","测试页面","");

dorado 刷新_dorado BDF常见问题相关推荐

  1. dorado 刷新_5.dorado查询开发:使用flushData方法 (T1)

    在之前学习的章节中,已经详解过关于使用QueryCommand方式实现dorado的查询开发.在使用了FormDataset+QueryCommand的查询示例中,QueryCommand控件自动将F ...

  2. dorado 刷新_dorado7常用内容

    tabControl").set("currentTab","tab2"); // 通过tab的索引(index)属性切换 view.get(&quo ...

  3. dorado 刷新_记录新建dorado项目更新规则中报错

    异常: Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Er ...

  4. dorado 刷新_dorado5 datatree 刷新问题

    我的ibaits的sql语句是这样的 select I_NODEID i_nodeid,I_NODENAME i_nodename,I_ORDERNUMBER i_ordernumber,I_PARE ...

  5. html本地站点建立代码,实验目的通过编写一小网页熟练HTML语言书写方法;学会建立本地站点.doc...

    实验目的通过编写一小网页熟练HTML语言书写方法:学会建立本地站点.doc 实验一 HTML标记语言 一.实验目的:1.标记符 标记符又称标签,HTML是影响网页内容显示格式的标记符集合,浏览器根据标 ...

  6. GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,WINDOWS平台)

    工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行.作为 ...

  7. GDB苹果网页一键打包工具使用说明

    GDB苹果网页一键打包工具使用说明 工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何 ...

  8. html一键打包iOS,GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)...

    工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行.作为 ...

  9. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

最新文章

  1. 什么是“自然语言处理”? 它到底在“处理”些什么?
  2. 利用java反射机制,子类从父类拷贝属性--解决信息修改类设计的模式
  3. z变换的零极点图matlab,实验三 Z变换零极点分布及部分分式展开的MATLAB实现.doc...
  4. php redis新增数据类型,Redis有哪几种数据类型
  5. c#中Task线程的用法
  6. 最全Kafka 设计与原理详解【2017.9全新】
  7. ElasticSearch入门系列(一)是什么以及安装和运行
  8. python编程(基于twisted的client编程)
  9. 卓越产品计划丨神策分析性能优化详解:数据重组织查询优化
  10. ubuntu常用功能安装集锦
  11. 富文本框wangEditor
  12. 阿里云服务器没有公网IP
  13. 快手市值万亿、炒股如同炒币,资本市场正在币圈化?
  14. (附源码)springboor大学生防疫封校管理系统 毕业设计632124
  15. Vue实现二选一、菜单更多功能:
  16. Vulnstack(四)
  17. 2018南邮全国计算机大赛,关于举办2018年南京邮电大学第十届数学建模竞赛通知...
  18. ICAN业务流程外包是在CRMservices的专业领导机构
  19. steamvr2.0 + curvedUI 实现与UI射线交互
  20. 一:项目需求分析;开发环境介绍;

热门文章

  1. 第十三章 第六节 本章小结
  2. Entity Framework4.1实现动态多条件查询、分页和排序
  3. 【中级05】Java泛型、反射
  4. Repo报错:GnuTLS recv error (-9): Error decoding the received TLS packet.
  5. Ubuntu18.04之apt-file用法
  6. cscope索引软链接解决方法
  7. android 创建目录/文件/读写文件
  8. Vue之webpack打包CSS图片字体
  9. ubuntu 20.04 安装可编辑截图工具 flameshot
  10. tcp转串口_单路RS232/422/485串口服务器产品介绍