JEECG popup表单带参数改造
因为工作上要使用JEECG,JEECG在大体上很方便但是在部分内容中功能受限,因为我需要使用带参数的popup表单所以重写了方法。
首先是js方法
function popupClick(pobj,tablefield,inputnames,pcode,params) {
$.dialog.setting.zIndex = getzIndex(true);
if(inputnames==""||pcode==""){
alert("popup参数配置不全");
return;
}
if(typeof(windowapi) == 'undefined'){
$.dialog({
content: "url:cgReportController.do?popupModify&id="+pcode+"¶ms="+params,
zIndex: getzIndex(),
lock : true,
title:"选择",
width:800,
height: 400,
cache:false,
ok: function(){
iframe = this.iframe.contentWindow;
var selected = iframe.getSelectRows();
if (selected == '' || selected == null ){
alert("请选择");
return false;
}else {
//对应数据库字段不为空的情况下,根据表单中字典TEXT的值来取popup的值
if(tablefield != "" && tablefield != null){
var fields = tablefield.split(",");
var inputfield = inputnames.split(",");
for(var i1=0;i1<fields.length;i1++){
var str = "";
$.each( selected, function(i, n){
if (i==0)
str+= n[fields[i1]];
else{
str+= ",";
str+=n[fields[i1]];
}
});
var inputname = $(pobj).attr("name");
var inputs = inputname.split(".");
//判断传入的this格式是否为 "AA[#index#].aa"的形式
if(str.indexOf("undefined")==-1){
if(inputs.length>1){
//update--begin--author:scott date:20171031 for:TASK #2385 online和代码生成器 一对多行popup多字段赋值问题解决-----------
var inpu = inputs[0]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val(str);
}else{
$("input[name='"+inputfield[i1]+"']").val(str);
}
}else{
if(inputs.length>1){
var inpu = inputs[0]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val("");
}else{
$("input[name='"+inputfield[i1]+"']").val("");
}
}
}
}else{
//对应数据库字段为空的情况下并且字典CODE传入多个值时,根据表单中字典CODE的值从popup中来取值
var inputfield = inputnames.split(",");
if(inputfield.length>1){
for(var i1=0;i1<inputfield.length;i1++){
var str = "";
$.each( selected, function(i, n){
if (i==0)
str+= n[inputfield[i1]];
else{
str+= ",";
str+=n[inputfield[i1]];
}
});
var inputname = $(pobj).attr("name");
var inputs = inputname.split(".");
if(str.indexOf("undefined")==-1){
if(inputs.length>1){
var inpu = inputs[i1]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val(str);
}else{
$("input[name='"+inputfield[i1]+"']").val(str);
}
}else{
if(inputs.length>1){
var inpu = inputs[i1]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val("");
}else{
$("input[name='"+inputfield[i1]+"']").val("");
}
}
}
}else{
//对应数据库字段为空的情况下并且字典CODE传入一个值时,根据表单中字典TEXT的值从popup中来取值
var str = "";
$.each( selected, function(i, n){
if (i==0)
str+= n[inputfield];
else
str+= ","+n[inputfield];
});
var inputname = $(pobj).attr("name");
var inputs = inputname.split(".");
if(str.indexOf("undefined")==-1){
if(inputs.length>1){
var inpu = inputs[0]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val(str);
}else{
$("input[name='"+inputfield+"']").val(str);
}
}else{
if(inputs.length>1){
var inpu = inputs[0]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val("");
}else{
$("input[name='"+inputfield+"']").val("");
}
}
}
}
return true;
}
},
cancelVal: '关闭',
cancel: true // 为true等价于function(){}
});
}else{
$.dialog({
content: "url:cgReportController.do?popupModify&id="+pcode+"¶ms="+params,
zIndex: getzIndex(),
lock : true,
title:"选择",
width:800,
height: 400,
parent:windowapi,
cache:false,
ok: function(){
iframe = this.iframe.contentWindow;
var selected = iframe.getSelectRows();
if (selected == '' || selected == null ){
alert("请选择");
return false;
}else {
//对应数据库字段不为空的情况下,根据表单中字典TEXT的值来取popup的值
if(tablefield != "" && tablefield != null){
var fields = tablefield.split(",");
var inputfield = inputnames.split(",");
for(var i1=0;i1<fields.length;i1++){
var str = "";
$.each( selected, function(i, n){
if (i==0)
str+= n[fields[i1]];
else{
str+= ",";
str+=n[fields[i1]];
}
});
var inputname = $(pobj).attr("name");
var inputs = inputname.split(".");
//判断传入的this格式是否为 "AA[#index#].aa"的形式
if(str.indexOf("undefined")==-1){
if(inputs.length>1){
var inpu = inputs[0]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val(str);
}else{
$("input[name='"+inputfield[i1]+"']").val(str);
}
}else{
if(inputs.length>1){
var inpu = inputs[0]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val("");
}else{
$("input[name='"+inputfield[i1]+"']").val("");
}
}
}
}else{
//对应数据库字段为空的情况下并且字典CODE传入多个值时,根据表单中字典CODE的值从popup中来取值
var inputfield = inputnames.split(",");
if(inputfield.length>1){
for(var i1=0;i1<inputfield.length;i1++){
var str = "";
$.each( selected, function(i, n){
if (i==0)
str+= n[inputfield[i1]];
else{
str+= ",";
str+=n[inputfield[i1]];
}
});
var inputname = $(pobj).attr("name");
var inputs = inputname.split(".");
if(str.indexOf("undefined")==-1){
if(inputs.length>1){
var inpu = inputs[i1]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val(str);
}else{
$("input[name='"+inputfield[i1]+"']").val(str);
}
}else{
if(inputs.length>1){
var inpu = inputs[i1]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val("");
}else{
$("input[name='"+inputfield[i1]+"']").val("");
}
}
}
}else{
//对应数据库字段为空的情况下并且字典CODE传入一个值时,根据表单中字典TEXT的值从popup中来取值
var str = "";
$.each( selected, function(i, n){
if (i==0)
str+= n[inputfield];
else
str+= ","+n[inputfield];
});
var inputname = $(pobj).attr("name");
var inputs = inputname.split(".");
if(str.indexOf("undefined")==-1){
if(inputs.length>1){
var inpu = inputs[i1]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val(str);
}else{
$("input[name='"+inputfield+"']").val(str);
}
}else{
if(inputs.length>1){
var inpu = inputs[i1]+"."+inputfield[i1];
$("input[name='"+inpu+"']").val("");
}else{
$("input[name='"+inputfield+"']").val("");
}
}
}
}
return true;
}
},
cancelVal: '关闭',
cancel: true // 为true等价于function(){}
});
}
}
这个方法在原有的基础上增加了params用‘,’来分割多个参数
然后是后台的方法
@RequestMapping(params = "popupModify")
public void popupModify(String params,String id, HttpServletRequest request,
HttpServletResponse response) {
//step.1 根据id获取该动态报表的配置参数
Map<String, Object> cgReportMap = null;
//String params = (String) request.getAttribute("params");
try{
cgReportMap = cgReportService.queryCgReportConfig(id);
String[] pstr = params.split(",");
List<String> param = Arrays.asList(pstr);
cgReportMap.put("paramValue",param);
}catch (Exception e) {
throw new CgReportNotFoundException("动态报表配置不存在!");
}
//step.2 获取列表ftl模板路径
FreemarkerHelper viewEngine = new FreemarkerHelper();
//step.3 组合模板+数据参数,进行页面展现
loadVars2(cgReportMap,request);
//step.4 页面css js引用
cgReportMap.put(CgReportConstant.CONFIG_IFRAME, getHtmlHead(request));
String html = viewEngine.parseTemplate("/org/jeecgframework/web/cgreport/engine/core/cgreportlistpopup.ftl", cgReportMap);
PrintWriter writer = null;
try {
response.setContentType("text/html");
response.setHeader("Cache-Control", "no-store");
writer = response.getWriter();
writer.println(html);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
writer.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
private void loadVars2(Map<String, Object> cgReportMap,HttpServletRequest request) {
Map mainM = (Map) cgReportMap.get(CgReportConstant.MAIN);
List<Map<String,Object>> fieldList = (List<Map<String, Object>>) cgReportMap.get(CgReportConstant.ITEMS);
List<String> paramList = (List<String>)cgReportMap.get(CgReportConstant.PARAMS);
List<String> paramValue = (List<String>)cgReportMap.get("paramValue");
List<Map<String,Object>> queryList = new ArrayList<Map<String,Object>>(0);
for(Map<String,Object> fl:fieldList){
fl.put(CgReportConstant.ITEM_FIELDNAME, ((String)fl.get(CgReportConstant.ITEM_FIELDNAME)).toLowerCase());
String isQuery = (String) fl.get(CgReportConstant.ITEM_ISQUERY);
if(CgReportConstant.BOOL_TRUE.equalsIgnoreCase(isQuery)){
loadDic(fl,fl);
queryList.add(fl);
}
}
StringBuilder sb = new StringBuilder("");
if(paramList!=null&¶mList.size()>0){
queryList = new ArrayList<Map<String,Object>>(0);
int index = 0;
for(String param:paramList){
sb.append("&").append(param).append("=").append(paramValue.get(index));
/*String value = request.getParameter(param);
if(StringUtil.isNotEmpty(value)){
sb.append(value);
}*/
index++;
}
}
cgReportMap.put(CgReportConstant.CONFIG_ID, mainM.get("code"));
cgReportMap.put(CgReportConstant.CONFIG_NAME, mainM.get("name"));
cgReportMap.put(CgReportConstant.CONFIG_FIELDLIST, fieldList);
cgReportMap.put(CgReportConstant.CONFIG_QUERYLIST, queryList);
//获取传递参数
cgReportMap.put(CgReportConstant.CONFIG_PARAMS, sb.toString());
}
在表单填写的时候就如同动态表单提示那样就行
报表参数把参数顺序写对就行。