您好,登錄后才能下訂單哦!
FineReport作為插件化開發(fā)的報表軟件,有些特殊需求的功能需要自己開發(fā),開發(fā)的插件包帆軟官方有提提供,可以去帆軟論壇上找,本文將主要介紹如何開發(fā)一個自定義控件,這里講講方法論。
第一步:實例化一個注冊控件的接口
給四個信息 我們的控件類,界面類,圖標路徑,控件類型名字
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/p_w_picpaths/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);
好了~以上就是全部的代碼開發(fā)~然后寫個xml用ant打包成插件就可以了。
代碼解釋:
首先來看這段代碼是什么意思呢?
就是我定義了一個控件類型為CustomComboBoxEditor的控件,他繼承了ComboBoxEditor的全部方法和屬性,并且我把新定義的控件類型的標記聲明為customcombo,這個標記有啥用勒,其他用途就不說了,單單說在這里的用途,就是JAVA 本身是不能讓前端取生成什么控件的~而是通過告訴前端一個配置,前端的JS引擎(姑且這么稱呼他吧)~根據(jù)這個配置去執(zhí)行對應(yīng)的腳本生成對應(yīng)的dom樣式之類的~shortcut你就這么理解~后臺返回一個配置是要生成customcombo這個控件~那么它就像一個map一樣找到了對應(yīng)的鍵值FR.CustomComboBoxEditor~然后把該控件的配置丟到這個方法里面去執(zhí)行。就生成我們的控件了。
因為這個例子中并沒有對前端有任何修改的要求~所以就沒做任何改動~下面看后臺。
我們這個例子是要修改模糊匹配的方式。
那么原來控件匹配的機制是怎么搞的,是這樣的:假設(shè)我是一個老板(媽蛋也只能假設(shè)一下了),現(xiàn)在我想了解一份紙質(zhì)合同的細節(jié),但是公司有一大坨紙質(zhì)合同我怎么找呢~當然是請個秘書了(美女最好),我告訴她我要的合同大概是有些什么信息~然后她去找出來把最后找到的合同給我就可以了。
我們這里控件ComboBox就是老板,ComboBoxDataFilter就是秘書,就是這么個意思,這里每個秘書肯定都有自己找合同的一套方法,以前那個秘書是只要有點相關(guān)的就都找出來了,新來的這個秘書是只找老板提示的信息匹配到的合同~查找匹配的方法就是isMatch,這個代碼就是這樣的,代碼的開發(fā)其實只要仔細分析就能夠映射到現(xiàn)實生活中的很多事務(wù)處理上面~因為代碼也是人設(shè)計的,邏輯總逃脫不了人處理事務(wù)的思維。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。