SSM+BJUI在对记录进行添加或者编辑时可以共用一个jsp页面,然后再进行保存。
1.主页面添加两个按钮,一个是添加按钮一个是编辑按钮。
添加
< BR> 编辑
三个页面:
partnerMain就是当前主页面,带有添加以及编辑的页面。
partnerEditDlg是添加和编辑共用的页面。
1.现在点击添加按钮,来到对应的action
@RequestMapping(value="/toAdd")
public ModelAndView toAdd(){
ModelAndView mv = null;
try {
//业务部分代码省略
//传递当前的操作类型的标识,左边是op常量参数,表示操作类型,右边是add常量参数,表示是添加操作
mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_ADD);
//传递到共用页面的标题参数,左边是title常量参数,右边是要显示的标题的内容
mv.addObject(ModelAndViewConstants.TITLE_KEY, "添加合作商户信息");
//跳转的具体的页面
mv.setViewName(ModelAndViewConstants.PARTNER_EDIT_VIEW);
LogService.getInstance(this).error("进入合作伙伴添加功能成功:" +ModelAndViewConstants.PARTNER_EDIT_VIEW);
}
catch(Exception ex) {
LogService.getInstance(this).error("进入合作伙伴添加失败:" + ex.getMessage(), ex);
mv = new ModelAndView("redirect:/error.jsp");
}
return mv;
}
2.通过上面的action可以传递要执行的操作类型为add,并跳转到共用的页面。
主要功能点;
在共享页面添加隐藏input,来接受传过来的op参数,即操作类型,这里是add
因为是添加所以传过来的实体类partner没有ID等属性,但是要在编辑要用到,所以这里也添加一个hidden。
这里只显示一个字段,其他的省略。
3.点击保存时,BJUI会提交当前form,此form会提交到:${ctx}/sys/cooperativePartnersManageAction/doSave,然后执行保存的操作。
@ResponseBody
@RequestMapping(value="/doSave")
public Map doSave(SysPartners entity, String op) {
Map jsonResult = null;
try {
//正式业务部分开始
//与配置权限管理中相对应,实现添加或编辑完实时更新
String tabid = tabid(ModelAndViewConstants.PARTNER_SYS_ID);
//如果是测试签约
if(entity.getContractStatus()==0) {
entity.setTestContractTime(new Date());
entity.setContractStatusName("测试签约");
}
//如果是正式签约
if(entity.getContractStatus()==1) {
entity.setFormalContractTime(new Date());
entity.setContractStatusName("正式签约");
}
entity.setRecordTime(new Date());
//获得当前用户的id和name,加入客户对象中
ShiroUser currentUser = (ShiroUser)SecurityUtils.getSubject().getPrincipal();
entity.setModifyUserId(currentUser.getUserId());
entity.setModifyUserName(currentUser.getAccount());
//正式业务部分结束
//如果op标志参数为空,或者为add 那么就执行添加操作
if (null == op || ModelAndViewConstants.OPERATION_VALUE_ADD.equals(op)) {
//此字段表示数据未被更改
entity.setStatus("0");
//执行插入数据操作,方法是有代码生成工具自动生成
int count = this.sysPartnersService.insert(entity);
if (count > 0) {
LogService.getInstance(this).debug("添加客户信息成功!");
}
}
else {
//如果不是,则就是编辑后的保存操作
//获取现存数据,也是通过代码生成工具生成的方法
SysPartners currentSysPartner = this.sysPartnersService.getByPrimaryKey(entity);
int count = this.sysPartnersService.updateByPrimaryKey(entity);
if (count > 0) {
LogService.getInstance(this).debug("编辑合作商户信息成功!");
}
}
Integer statusCode = 200;
String msg = "合作商户信息保存成功";
jsonResult = JsonResult.jsonReturn(statusCode, msg, tabid);
}
catch(Exception ex) {
LogService.getInstance(this).error("保存合作商户信息失败:" + ex.getMessage(), ex);
String msg = "保存合作商户信息失败:" + ex.getMessage();
jsonResult = JsonResult.jsonReturnErr(msg);
}
return jsonResult;
}
1.现在点击主页面的编辑按钮
编辑
2.点击编辑按钮会跳到后台action,并将当前BJUI集成的能获取选中项的ID传过去。
现在来到后台的toEdit
@RequestMapping(value="/toEdit")
public ModelAndView toEdit(Integer id) {
ModelAndView mv = null;
try {
//根据ID先查询要编辑的数据
SysPartners partner = this.sysPartnersService.getByPrimaryKey(id);
//业务部分代码开始
//获取签约状态,此处是通过关联码表来实现
Map param = new HashMap();
//0 表示正常数据
param.put("status", "0");
param.put("codeType", "contractStatus");
//根据参数将相关码表内容查询出来
List contractStatus = codeService.getByParam(param);
mv = new ModelAndView();
//传递签约状态
mv.addObject("contractStatus", contractStatus);
//业务部分代码结束
//传递操作类型,这里是编辑操作
mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_EDIT);
//jsp页面要显示的标题title
mv.addObject(ModelAndViewConstants.TITLE_KEY, "修改合作商户信息");
//将查询到的实体Model类传递
mv.addObject(ModelAndViewConstants.PARTMER, partner);
//跳转到编辑界面
mv.setViewName(ModelAndViewConstants.PARTNER_EDIT_VIEW);
}
catch(Exception ex) {
LogService.getInstance(this).error("进入客户编辑失败:" + ex.getMessage(), ex);
mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
}
return mv;
}
关键点:
通过传过来的ID获取要编辑的Model实体类的数据,然后执行相应的业务,
关键是通过:
mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_EDIT);
来传递操作类型,左边是常量参数op,右边是常量参数edit。
然后传递要显示的标题,传递获取的model数据,跳转到共用的编辑页面。
3.剩余操作与添加功能一样,不过是编辑时将数据传递过去,通过input的value来赋值,如果是添加时value为空所以不显示,如果是编辑则会将传递的数据进行显示,添加与编辑都是执行同一个save方法。