解析如何开发FineReport的自定义控件

 更新时间:2016年12月15日 16:02:21   作者:老A不折腾  
FineReport作为插件化开发的报表软件,有些特殊需求的功能需要自己开发,开发的插件包帆软官方有提提供,可以去帆软论坛上找,本文将主要介绍如何开发一个自定义控件,这里讲讲方法论。需要的朋友一起来看下吧

FineReport作为插件化开发的报表软件,有些特殊需求的功能需要自己开发,开发的插件包帆软官方有提提供,可以去帆软论坛上找,本文将主要介绍如何开发一个自定义控件,这里讲讲方法论。

第一步:实例化一个注册控件的接口

给四个信息 我们的控件类,界面类,图标路径,控件类型名字

package com.hg.free.plugin.customcombo.param;
import com.fr.design.designer.creator.XComboBox;
import com.fr.design.fun.impl.AbstractParameterWidgetOptionProvider;
import com.fr.form.ui.Widget;
public class WidgetRegister extends AbstractParameterWidgetOptionProvider {
  @Override
  public Class<? extends Widget> classForWidget() {
    return CustomComboBox.class;
  }
  @Override
  public Class<?> appearanceForWidget() {
    return XComboBox.class;
  }
  @Override
  public String iconPathForWidget() {
    return "/com/fr/web/images/combobox.png";
  }
  @Override
  public String nameForWidget() {
    return "自定义下拉框";
  }
} 

第二步,重写控件类

package com.hg.free.plugin.customcombo.param;
import com.fr.form.ui.ComboBox;
import com.fr.ui.DataFilter;
public class CustomComboBox extends ComboBox {
  private static final long serialVersionUID = 7169771062153345236L;
  @Override
  public String getXType() {
  return "customcombo";
 }
  @Override
  protected DataFilter createDataFilter() {
  return new CustomComboBoxDataFilter();
 }
}

因为要改变过滤方式,就要重写一个过滤器

package com.hg.free.plugin.customcombo.param;
import com.fr.form.ui.ComboBoxDataFilter;
public class CustomComboBoxDataFilter extends ComboBoxDataFilter {
  @Override
  public boolean isMatch(String txt, String filter) {
    if(null==txt && null!=filter)return false;
    if(null==txt && null==filter)return true;
    return txt.indexOf(filter)!=-1;
  }
} 

第三步,继承前端控件JS

(function($){
  FR.CustomComboBoxEditor = FR.extend(FR.ComboBoxEditor, {
   _init: function () {
   FR.CustomComboBoxEditor.superclass._init.apply(this, arguments);
   }
  });
  $.shortcut("customcombo", FR.CustomComboBoxEditor);
})(jQuery);

好了~以上就是全部的代码开发~然后写个xml用ant打包成插件就可以了。

代码解释:

首先来看这段代码是什么意思呢?

就是我定义了一个控件类型为CustomComboBoxEditor的控件,他继承了ComboBoxEditor的全部方法和属性,并且我把新定义的控件类型的标记声明为customcombo,这个标记有啥用勒,其他用途就不说了,单单说在这里的用途,就是JAVA 本身是不能让前端取生成什么控件的~而是通过告诉前端一个配置,前端的JS引擎(姑且这么称呼他吧)~根据这个配置去执行对应的脚本生成对应的dom样式之类的~shortcut你就这么理解~后台返回一个配置是要生成customcombo这个控件~那么它就像一个map一样找到了对应的键值FR.CustomComboBoxEditor~然后把该控件的配置丢到这个方法里面去执行。就生成我们的控件了。

因为这个例子中并没有对前端有任何修改的要求~所以就没做任何改动~下面看后台。

我们这个例子是要修改模糊匹配的方式。

那么原来控件匹配的机制是怎么搞的,是这样的:假设我是一个老板(妈蛋也只能假设一下了),现在我想了解一份纸质合同的细节,但是公司有一大坨纸质合同我怎么找呢~当然是请个秘书了(美女最好),我告诉她我要的合同大概是有些什么信息~然后她去找出来把最后找到的合同给我就可以了。

我们这里控件ComboBox就是老板,ComboBoxDataFilter就是秘书,就是这么个意思,这里每个秘书肯定都有自己找合同的一套方法,以前那个秘书是只要有点相关的就都找出来了,新来的这个秘书是只找老板提示的信息匹配到的合同~查找匹配的方法就是isMatch,这个代码就是这样的,代码的开发其实只要仔细分析就能够映射到现实生活中的很多事务处理上面~因为代码也是人设计的,逻辑总逃脱不了人处理事务的思维。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • SpringBoot发现最新版Druid重大问题(坑)

    SpringBoot发现最新版Druid重大问题(坑)

    这篇文章主要介绍了SpringBoot发现最新版Druid重大问题(坑),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java安全编码指南之:表达式规则说明

    java安全编码指南之:表达式规则说明

    这篇文章主要介绍了java安全编码指南之:表达式规则说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • spring cloud gateway全局过滤器实现向request header中放数据

    spring cloud gateway全局过滤器实现向request header中放数据

    这篇文章主要介绍了spring cloud gateway全局过滤器实现向request header中放数据的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java模拟并解决缓存穿透问题

    Java模拟并解决缓存穿透问题

    这篇文章主要介绍了Java模拟并解决缓存穿透问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • SpringBoot@Componet注解注入失败的问题

    SpringBoot@Componet注解注入失败的问题

    这篇文章主要介绍了SpringBoot@Componet注解注入失败的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 学习Java模拟实现百度文档在线浏览

    学习Java模拟实现百度文档在线浏览

    这片文章介绍了如何使用Java模拟实现百度文档在线浏览,文章思路清晰,需要的朋友可以参考下
    2015-07-07
  • 详解Java token主流框架之JWT

    详解Java token主流框架之JWT

    JWT(JSON Web Token)是一种基于JSON格式的轻量级的、用于身份认证的开放标准,它通过在用户和服务器之间传递一个安全的、可靠的、独立的JSON对象来进行身份验证和授权,本文将详细给大家介绍Java token主流框架之JWT,需要的朋友可以参考下
    2023-05-05
  • 解决springboot利用ConfigurationProperties注解配置数据源无法读取配置信息问题

    解决springboot利用ConfigurationProperties注解配置数据源无法读取配置信息问题

    今天在学习springboot利用ConfigurationProperties注解配置数据源的使用遇到一个问题无法读取配置信息,发现全部为null,纠结是哪里出了问题呢,今天一番思考,问题根源找到,下面把我的解决方案分享到脚本之家平台,感兴趣的朋友一起看看吧
    2021-05-05
  • Mybatis CachingExecutor二级缓存使用示例详解

    Mybatis CachingExecutor二级缓存使用示例详解

    这篇文章主要介绍了 Mybatis的CachingExecutor与二级缓存使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 关于Sentinel中冷启动限流原理WarmUpController

    关于Sentinel中冷启动限流原理WarmUpController

    这篇文章主要介绍了关于Sentinel中冷启动限流原理WarmUpController,具有很好的参考价值,希望对大家有所帮助。
    2023-04-04

最新评论