# 功能描述
在编辑列表时,有时用户希望添加一些自定按钮实现一些特定的功能,这个时候可以使用自定义按钮来实现。
# 操作步骤
添加测试按钮
我们这里定义一个事件函数,这个函数是一个JS方法。
编写事件函数
我们可以在页面Js函数定义,我们编写和上一步骤同名的函数,这样我们就可以调用这个脚本了。
预览 点击按钮
打印出列表数据。
生成出的代码:
调用后端的代码 在列表中,我们可以通过按钮调用后端的代码,实现一些特定的功能,比如选中某个数据,然后进行状态更新等。
配置按钮
点击新增脚本按钮
点击配置自定处理脚本按钮
生成代码
这里生成一个 ongetAction 方法
function handButtonClick(e){
var url=e.sender.url;
var rows=grid.getSelecteds();
_SubmitJson({
url:__rootPath+url,
data:{
data:mini.encode(rows)
},
method:'POST',
success:function(result){
grid.load();
}
});
}
事件如上,这个方法是将选中行数据提交到/dev/cus/customData/custombtn/selfButtonExe/getAction.do 这个URL上面。
脚本编写方法 上面说到,我们是将数据提交到后端的一个URL上面,我们可以看到这个url的代码实现。
@RequestMapping("{boKey}/selfButtonExe/{funKey}")
@ResponseBody
public JsonResult selfButtonExe(HttpServletRequest request,@PathVariable("boKey")String boKey,@PathVariable("funKey")String funKey) throws Exception{
SysBoList sysBoList=sysBoListManager.getBoList(boKey);
if(sysBoList==null){
return new JsonResult(false,"不存在标识键为:"+ boKey+"的业务对象的配置");
}
SysBoTopButton sysBoTopButton=sysBoList.getTopButtonMap().get(funKey);
if(sysBoTopButton==null ||StringUtils.isEmpty(sysBoTopButton.getServerHandleScript())){
return new JsonResult(false,"不存在标识键为:"+ funKey+"按钮的后端代码配置!");
}
Object result=null;
String pScript=null;
try{
Map<String,Object> variables=RequestUtil.getParameterValueMap(request, true);
//TODO,传入ov数组还是Json数值
String data=request.getParameter("data");
JSONArray ary=JSONArray.parseArray(data);
variables.put("variables", variables);
variables.put("rows", ary);
//动态解析脚本
pScript=freemarkEngine.parseByStringTemplate(variables, sysBoTopButton.getServerHandleScript());
//动态执行脚本
result=groovyEngine.executeScripts(pScript, variables);
}catch(Exception ex){
ex.printStackTrace();
String errMsg=pScript+"执行有错误!错误如下:"+ex.getMessage();
return new JsonResult(false,errMsg);
}
return new JsonResult(true,"成功执行!",result);
}
因此我们在编写这个脚本时,上下文变量是:
variables : 这个数据是从上下文请求获取的数据,是一个map类型的数据。 rows: 是我们从客户端提交选中的数据。
执行脚本后返回的数据我们放到返回的结果中。
编写脚本如下:
import org.springframework.jdbc.core.JdbcTemplate;
import com.redxun.core.util.AppBeanUtil;
JdbcTemplate jdbcTemplate=AppBeanUtil.getBean(JdbcTemplate.class);
for(int i=0;i<rows.size();i++){
String sql="update t_demo_1 set f_address=CONCAT(f_address,'1') where id_=?";
jdbcTemplate.update(sql,rows[i].ID_);
}
这个代码的功能是将选中的记录的地址统一修改。