2 wangpinwei wangpinwei 于 2016.04.01 01:19 提问

if 嵌套过多 求大神指点 10C
 @RequestMapping(value = "/add", produces = "text/plain;charset=UTF-8")
    public ModelAndView AddBrands(HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        ModelMap map = new ModelMap();

        try {

            //表单元素名
            String[] formElements = { "bName", "bRemark" };
            //获取表单元素
            Map<String, Object> elementsValues = FileUpload.getFormElements(request, formElements);
            //上传结果
            Map<String, Object> values = null;
            //实体
            Brands brands = new Brands();
                //判断表单元素是否为空 msg 存储错误信息
                if (null != elementsValues.keySet() && null != elementsValues.get("msg")) {
                    map.addAttribute("msg", EncodingTools.encodeStr(elementsValues.get("msg").toString()));
                } else {
                    //实体赋值
                    brands.setbName(elementsValues.containsKey("bName") ? elementsValues.get("bName").toString() : "");
                    brands.setbRemark(elementsValues.containsKey("bRemark") ? elementsValues.get("bRemark").toString() : "");
                    //保存实体成功 mybatis 返回成功的ID
                    if (0 < brandsService.addBrands(brands) && null != brands.getbId() && 0 != brands.getbId()) {
                        //拼接路径
                        StringBuffer filePath = new StringBuffer(request.getSession().getServletContext().getRealPath("\\"));
                        filePath.append("upload\\image\\logo\\");
                        //因为这里的路径需要保存成功的实体ID
                        filePath.append(brands.getbId() + "\\");
                        String[] fileType = { "image/png" };
                        //取出读出表单时存储的FileItem
                        FileItem item = (FileItem) elementsValues.get("item");
                        //上传图片
                        values = FileUpload.uploadFile(item, 1, fileType, filePath.toString());
                        //判断上传是否成功
                        if (null != values.keySet() && null == values.get("msg")) {
                            //得到上传成功后的文件名// 这可以减少一个判断 在页面多加一个input 存储表单类型 生成名称 先保存 再上传
                            String fileName = values.get("fileName").toString();
                            brands.setbIconPath(fileName);
                            //更新
                            if(0 < brandsService.editBrands(brands)){
                                //成功
                            }else{
                                //失败
                            }
                        } else if (null != values.get("msg")) {
                            map.addAttribute("msg", EncodingTools.encodeStr("上传图片失败!"));
                        }
                        map.addAttribute("msg", EncodingTools.encodeStr("添加成功!"));
                        //return new ModelAndView("redirect:/brands/findAll", map);
                    } else {
                        map.addAttribute("msg", EncodingTools.encodeStr("插入数据失败!"));
                    }
                }

        } catch (Exception e) {
            e.printStackTrace();
            map.addAttribute("msg", EncodingTools.encodeStr("上传文件失败!"));
        }
        return new ModelAndView("redirect:/view/admin/brands/add_brands.jsp",
                map);
    }

8个回答

caozhy
caozhy   Ds   Rxr 2016.04.01 06:40

什么叫嵌套过多,你的具体的问题是什么呢?

wangpinwei
wangpinwei 优化一下 if 套了 4层
一年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.01 06:55

看你的代码,代码分支还是很明确的,就是判断上传代码是否成功这段比较长,建议把第一个if的方法体的内容抽离成一个私有方法,那么你的if逻辑块就相对清晰多了。而且抽离的部分代码量也不大,只是都放一块导致你的if操作可读性变差了。

CSDNXIAON
CSDNXIAON   2016.04.01 01:32

求大神解答Opengl ES2.0 for android的文档应该上哪里查
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

caoshangpa
caoshangpa   2016.04.01 08:35

感觉代码有点乱,看不太明白

esinzhong
esinzhong   2016.04.01 09:35

好复杂的做法,并且发现个小问题,那个保存的路径,在linux服务下跑应该会出问题。我建议if语句不要过多嵌套,不然可读性很差。

wangpinwei
wangpinwei 就是觉着 嵌套过多 想解决一下
一年多之前 回复
zn85600301
zn85600301   2016.04.01 11:29

才4层而已 不过看起来确实不过直观 可以重构把 //保存实体成功 mybatis 返回成功的ID里面的代码 拆成一个方法去调用 这样避免了一个方法过于冗长

wangpinwei
wangpinwei 这涉及到一个问题 上一个方法还没执行完 下一条语句就开始执行了
一年多之前 回复
jinlu7611
jinlu7611   2016.04.01 18:05

每个if else 单独作为method进行执行,代码层次太强的话容易缺乏可读性。

liexin_zpx
liexin_zpx   2016.04.03 00:43

spring有自带图片获取后outputstream 不需要你这么麻烦参考我的部分代码
@RequestMapping
protected void doPost(HttpServletRequest request, HttpServletResponse response
,@RequestParam("topphone") Object topphone) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
Children model=new Children();
if(!topphone.equals(""))
{
String path=commonService.Getvalue("topphonepath");
File file=new File(path);
if(!file.exists())
{
file.createNewFile();
}
String suffix=((MultipartFile)topphone).getOriginalFilename().substring(((MultipartFile)topphone).getOriginalFilename().indexOf("."));
String name=md5Service.GetMD5Code(((MultipartFile)topphone).getOriginalFilename());
//图片上传输出方法
((MultipartFile)topphone).transferTo(new File(path+"/"+name+suffix));
model.setTopphone(name+suffix);
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!