WebBulider的一些常用變量和控件的個人見解(有可能不準,不要當成文檔看)
module控件下有個finalize可以寫app.finBtn.fireEvent('click');
代表着查詢被單擊,這樣store控件就不用給autoLoad 設置爲true。
store 用來調用對應的操作數據的url和params使用來發送參數,autoLoad自動加載,不建議使用影響效率。
fieldset控件:用來美化界面的,或者說用來給總體的內容加上一個標籤欄名字,用來規範一定範圍中的內容。
tab控件: tabPosition這個是用來吧tab控件下的用來切換panel控件的切換按鈕放到下面去。
comp控件,用來寫對應合法的html代碼塊,
allowBlank屬性:false/true 這個屬性都是爲空。
popupMenu控件,下面跟上item下面就是下倆菜單
viewport視口控件:視圖默認顯示的窗口,通常他的layout佈局會被設置成fit用來自適應。panel1他是一個對應包裝的控件。
textarea控件:多行文本控件。
array控件 默認要把itemId改成columns這樣下面才能放置column控件
selType屬性有個checkboxmodel值,代表前面加一列多選框
toolbar控件,用來添加多個查詢的條件的。
keyName屬性代表了是從數據字典中的獲取到的值。
grid1控件是表格控件,他下面的itemdbclick是雙擊事件,itemclick是單擊事件。
combo控件,有個displayField屬性,是數據庫的字段,默認是顯示的內容,
還有個valueField 代表他的對應記錄的字段,一般都是display設置爲name,valueField
設置爲ID。BindField屬性功能:使該控件的取值綁定的字段的名稱。綁定之後將在所在容器中創建隱藏的控件,其值關聯bindField指定字段的值。當取容器的值時,比如使用Wb.getValue(app.panel1)取值時,除獲取該控件值外,還可獲得bindField指定字段的值。設置該屬性也使控件的值輸入或選擇必須存在於下拉列表中。當下拉框需要綁定store從遠程取數,並且數據存在顯示文本和值的對應關係時,可以通過設置此屬性來實現。該屬性區別於valueField。
file是一個文件控件,他們都在這個控件上寫上了allowBlank值爲false的屬性
check多選框,tagConfigs屬性可以這樣寫:
{
getValue: function() {
if (this.value==true||this.value=='1') {
return 1;
} else {
return 0;
}
}
}用來確定如果被選中值爲1,沒有咋爲0
hidden屬性代表這是否隱藏true代表隱藏
column控件 有dataIndex代表數據庫的對應的字段名字(別名優先)
xtype 屬性有個rownumberer值,代表當前的行數
column控件下可以添加一個text文本框用來修改內容
column的titleAlign是列名的對齊,而列的內容的對齊屬性是align
text控件,是文本框,有個readOnly只讀的選項可以設置爲true或者false,fieldLaber屬性:是前面的自帶的標籤爲主鍵
fieldLadel屬性是標籤名字通常會配合laberAlign:right 來使用
editale 屬性是否可以編輯表格 true & false;不對,好像不是這麼回事
window控件默認在module下,上來不會顯示,他的dialog屬性設置爲true就代表着:他有
確定和取消兩個按鈕。默認佈局layout設置爲fit;然後他下面的layout設置爲absolute
查詢的方法
app.grid1.store.load({
out:app.tbar//注意這裏不要加分號!!!原因不知道
});
對應的查詢module(模塊)的serverScript(腳本服務器)代碼如下:
var data = app.get(),sql='';
if(!Wb.isEmpty(data.name)){
sql += " and grade_nam like '%'||{?name?}||'%' ";
}
request.setAttribute('sql',sql);
module控件的子控件是dataorivuder1
select ID,GRADE_COD,GRADE_NAM,CREATED_BY,CREATED_ON,UPDATED_BY,UPDATED_ON
from T_GRADE
where 1=1 {#sql#}
前一個使用來添加模糊查詢的條件,後一個用來進行查詢,並且判斷有沒有模糊查詢的
條件存在。
修改事件,先改修表格,然後需要保存後才能生效
Wb.addEdit(app.grid1,
{ID:Wb.getUuid(), CREATED_BY:'{#sys.username#}',CREATED_ON:new Date(),
UPDATED_BY:'{#sys.username#}',UPDATED_ON:new Date()},'last',1,false);
刪除的單擊事件
var recs = app.grid1.getSelection();
if(recs.length === 0){
Wb.warn('請選擇至少一條記錄');
return;
}
Wb.remove(app.grid1);
複製一條記錄
var rec = app.grid1.getSelection()[0];
if(!rec){
Wb.warn('請選擇一條記錄');
return;
}
rec.data.ID = Wb.getUuid();
rec.data.columnsName='{#sys.username#}';//獲取當前登錄賬戶的名字
rec.data.columnsName2 = new Date(),
rec.data.columnsName3 = '{#sys.username#}';
rec.data.columnsName4 = new Date();
Wb.addEdit(app.grid1,rec.data,'last',1,false);
保存的單擊事件
if (!Wb.verifyGrid(app.grid1)) //判斷數據是否合法
return;
Wb.requestAg({ //這個是WebBulider自帶的請求方法
params: {//發送參數
datatable: [Wb.getModified(app.grid1)],//發送改變後的表格這裏有點蒙
className: "com.ag.web.agDemo.pojo.TGrade",
bean: "comBean",
insertSql: "resources/agDemo.TGradeMapper.insert",
deleteSql: "resources/agDemo.TGradeMapper.deleteByPrimaryKey",
updateSql: "resources/agDemo.TGradeMapper.updateByPrimaryKeySelective",
method: "saveGrid" //業務方法名
},
success: function(resp) {
app.findBtn.fireEvent('click');
Wb.tip('保存成功');
}
});
路徑地址是src下的main爲主路徑目錄
不對,他的對飲的方法是調用的springmvc下的Mapping.xml方法
第二中添加的方法,不需要點保存直接生效的
var win = new Ext.window.Window(app._Win); //app._win指向配置對象而非實例
win.show();
win.setIconCls('record_add_icon');
Wb.setTitle(win, '添加');
//窗口每次動態生成,方法在窗口銷燬時自動銷燬
win.mon(win, 'ok', function() {
Wb.requestAg({
params: {
tRelationData: Wb.getValue([win,app.tbar]),
bean: "TRelationController",
method: "saveMethod" //業務方法名
},
success: function(resp) {
win.close();
app.findBtn.fireEvent('click');
Wb.tip('新增成功');
}
});
});
第二種修改的方法,一樣不需要點保存才能生效:
var recs = app.grid1.getSelection();//這個是獲取所有被選中的記錄
if(recs.length !=1){
Wb.warn('請選擇一條記錄');
return;
}
var win = new Ext.window.Window(app._Win); //app._win指向配置對象而非實例
win.show();
win.setIconCls('record_edit_icon');
Wb.setTitle(win, '修改');
Wb.setValue(win,recs[0].data);
//窗口每次動態生成,方法在窗口銷燬時自動銷燬
win.mon(win, 'ok', function() {
Wb.requestAg({
params: {
tRelationData: Wb.getValue([win,app.tbar]),
bean: "TRelationController",
method: "saveMethod" //業務方法名
},
success: function(resp) {
win.close();
app.findBtn.fireEvent('click');
Wb.tip('修改成功');
}
});
});
第二種刪除的方法,不需要保存就能直接生效。
var rows = app.grid1.getSelection(),ids='-';
if(rows.length == 0){
Wb.warn('請選擇至少一條記錄');
return;
}
Wb.each(rows,function(row){
ids+=row.data.ID+"-";
});
Wb.confirm('確定要刪除姓名爲' + rows.length + ' 條記錄嗎?', function() {
Wb.requestAg({
params: {
ids:ids,
bean: "TRelationController",
method: "delTRelation" //業務方法名
},
success: function(resp) {
app.findBtn.fireEvent('click');
Wb.tip('刪除成功');
}
});
});
把webBuilder的數據導出到excel表格
使用控件button 設置屬性:iconCls爲db_export_icon ,click下的代碼:
var rows = app.grid1.getSelection();
if(rows.length == 0){
Wb.warn('請選擇一條記錄');
return;
}
console.log(rows);
var ids = '';
Wb.each(rows,function(row){
ids += row.data.ID+',';
});
Wb.request({
url: 'm?xwl=agDemo/studentData/expPoiExcel',
params:{ids:ids},
success: function(resp) {
Wb.tip('生成excel成功');
}
});
exPoiExcel程序下有個module控件設置的serverMethod值爲com.ag.web.agDemo.domain.TStudentController.expPoiExcel
這裏的路徑實際上代表這是一個路徑:項目名/CrmWebSysteam/src/main/java/
com/ag/web/agDemo/domain/TStudentController類下的expPoiExcel方法
public static void expPoiExcel(HttpServletRequest request, HttpServletResponse response){
String ids = request.getParameter("ids");
TStudentDao tStudentDao = (TStudentDao) SpringApplicationContext.getBean("TStudentDao");
if(TGradeNameToCod.dataMap.get("cod") == null) {
TGradeDao tGradeDao = (TGradeDao) SpringApplicationContext.getBean("TGradeDao");
TGradeNameToCod.dataMap.put("cod", tGradeDao.getGrade());
}
List list = tStudentDao.selectStudent(ids);
List data = new ArrayList();
if (list !=null && list.size()>0){
for (int i=0; list !=null && i<list.size();i++){
TStudent tStudent = (TStudent) list.get(i);
List slist = new ArrayList();
slist.add(tStudent.getName());
slist.add(tStudent.getSex());
slist.add(tStudent.getAge());
slist.add(TGradeNameToCod.transName(tStudent.getGradeCod()));
data.add(slist);
}
}
try {
String path = AgCommonUtil.getPath()+"excel/student/expExcel/";
String isFilePath = path + "student.xls";
String osFilePath = path+"s" + System.currentTimeMillis() + ".xls";
ExpPoiSimExcel.expExcel(data,isFilePath,osFilePath);
} catch (Exception e) {
e.printStackTrace();
}
}
AgCommonUtil.getPath()的源代碼:
public static String getPath(){
String str = AgCommonUtil.class.getResource("/").getPath();
String basicPath = str.substring(0,str.indexOf("target"));
String path = basicPath + "target/NeptuneArtifact/wb/document/";
return path;
}
先把源代碼放在這裏回頭細細研究。
excel文件上傳技術
首先還是button控件起手,然後他的click事件源代碼:
var win = new Ext.window.Window(app._fileWin); //指向配置對象而非實例
win.show();iconCls屬性的值爲:db_import_icon
對應的fileWin窗口控件:屬性設置:closaAction:destroy,dialog:true,layout:absolute
click:
if (!Wb.verify(app.form1)) //驗證值是否合法
return;
Wb.upload({
form: app.form1, //上傳的表單控件,必選項
showProgress: true, //顯示上傳進度條
url: 'm?xwl=agDemo/studentData/impExcel',
//上傳成功之後的回調方法
success: function(form, action, value) {
app.grid1.store.load();
app.fileWin.close();
}
});
impExcel程序下:moduled的serverEmthod:com.ag.web.agDemo.domain.TStudentController.impExcel
java源代碼:
public static void importExcelStream(InputStream stream,HttpServletRequest request, HttpServletResponse response) throws Exception {
List data = ImpExcel.readExcelBody(stream, 2, -1, 0, -1, 0);
if (data == null || data.size() == 0) {
return;
}
TStudentDao tStudentDao = (TStudentDao) SpringApplicationContext.getBean("TStudentDao");
if(TGradeNameToCod.dataMap.get("cod") == null) {
TGradeDao tGradeDao = (TGradeDao) SpringApplicationContext.getBean("TGradeDao");
TGradeNameToCod.dataMap.put("cod", tGradeDao.getGrade());
}
for(int i=0;data !=null && i<data.size();i++){
Map map = (Map) data.get(i);
TStudent tStudent = new TStudent();
tStudent.setId(SysUtil.getId());
tStudent.setName((String) map.get(0));
tStudent.setSex((String) map.get(1));
short age = Short.parseShort(map.get(2).toString());
tStudent.setAge(age);
tStudent.setGradeCod(TGradeNameToCod.transCod((String) map.get(3)));
String username = (String) request.getSession().getAttribute("sys.username");
tStudent.setCreatedBy(username);
tStudent.setCreatedOn(WbUtil.getNowDate());
tStudent.setUpdatedBy(username);
tStudent.setUpdatedOn(WbUtil.getNowDate());
tStudentDao.insert(tStudent);
}
}
SpringApplicationContext.getBean源代碼:
public class SpringApplicationContext implements ApplicationContextAware {
private static ApplicationContext appContext;
// Private constructor prevents instantiation from other classes
private SpringApplicationContext() {}
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
appContext = applicationContext;
}
public static Object getBean(String beanName) {
return appContext.getBean(beanName);
}
}
BeanFactory部分源代碼:
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String var1) throws BeansException;
}
第三種:增加的方法也需要保存事件,否則不會生效。
Wb.reset(app.panel2);
第三種:修改的方法,需要保存事件。
var rec = app.grid1.getSelection()[0];
if(!rec){
Wb.warn('請選擇一條記錄');
return;
}
Wb.setValue(app.panel2,rec.data);
第二種保存的方法:
if (!Wb.verify(app.panel2))
return;
Wb.requestAg({
params: {
tTeacherData: Wb.getValue(app.panel2),
bean: "TTeacherController",
method: "saveMethod" //業務方法名
},
success: function(resp) {
var data = Wb.decode(resp.responseText);
app.findBtn.fireEvent('click');
Wb.setValue(app.panel2,data[0]);
Wb.tip('保存成功');
}
});
導出word文檔的源代碼:
public static void expPoiWord(HttpServletRequest request, HttpServletResponse response) throws Exception {
TTeacher tTeacher = JSON.parseObject(request.getParameter("tTeacherData"),TTeacher.class);
Map<String, Object> params = new HashMap();
params.put("${time}", DateUtil.format(tTeacher.getCreatedOn(),"yyyy-MM-dd"));
params.put("${name}",tTeacher.getName());
params.put("${sex}",tTeacher.getSex());
params.put("${title}",tTeacher.getTitle());
params.put("${subjectCod}",tTeacher.getSubjectCod());
String path = AgCommonUtil.getPath()+"word/teacher/expWord/";
String inFilePath = path+"teacher.docx";
InputStream is = new FileInputStream(inFilePath);
XWPFDocument doc = new XWPFDocument(is);
ExpPoiSimWord expPoiSimWord = new ExpPoiSimWord();
//替換段落裏面的變量
expPoiSimWord.replaceInPara(doc,params);
//替換表格裏面的變量
expPoiSimWord.replaceInTable(doc,params);
String osFilePath = path+"t"+System.currentTimeMillis()+".docx";
OutputStream os = new FileOutputStream(osFilePath);
doc.write(os);
expPoiSimWord.close(os);
expPoiSimWord.close(is);
}
上傳word的源代碼:
public static void impWord(HttpServletRequest request,HttpServletResponse response) throws Exception {
InputStream is = (InputStream) request.getAttribute("file");
InputStream input = (InputStream) request.getAttribute("file");
String filename = (String) request.getAttribute("filename");
if (filename == null)
filename = (String) request.getAttribute("file__name");
//相應的數據解析讀取
ImpWord impWord = new ImpWord();
List data = impWord.processWord(is,filename);
String username = (String) request.getSession().getAttribute("sys.username");
TTeacher tTeacher = new TTeacher();
tTeacher.setId(SysUtil.getId());
tTeacher.setName((String) data.get(1));
tTeacher.setSex((String) data.get(3));
tTeacher.setTitle((String) data.get(5));
tTeacher.setSubjectCod((String) data.get(7));
tTeacher.setCreatedBy(username);
tTeacher.setCreatedOn(WbUtil.getNowDate());
tTeacher.setUpdatedBy(username);
tTeacher.setUpdatedOn(WbUtil.getNowDate());
TTeacherDao teacherDao = (TTeacherDao) SpringApplicationContext.getBean("TTeacherDao");
teacherDao.insert(tTeacher);
//生成word文檔保存
String path = AgCommonUtil.getPath()+"word/teacher/impWord/";
String osFilePath = path+"t"+System.currentTimeMillis()+".doc";
FileOutputStream out = new FileOutputStream(osFilePath);
byte buffer[] = new byte[1024];
int len = 0;
while ((len = input.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
WebUtil.send(response,true);
}
他們都是一個button控件,然後調用一個url連接到對應的expPoiWord中,
GIT提交的3布:
提交,拉取,推送
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.