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层
2 年多之前 回复
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 就是觉着 嵌套过多 想解决一下
2 年多之前 回复
zn85600301
zn85600301   2016.04.01 11:29

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

wangpinwei
wangpinwei 这涉及到一个问题 上一个方法还没执行完 下一条语句就开始执行了
2 年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java题库8
1. 一个没有实现Serializable接口的父类,编写一个能够序列化的子类 ,只要父类实现了序列化的接口,或者,子类实现了序列化的接口就可以序列化 “transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。 打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安
(地主源代码)求解! 做的不够好,求大神指点
(地主源代码)求解! 做的不够好,求大神指点
求大神指点下
集合A,集合B  已经确定A&amp;gt;B  A,B中不可能出现重复   A与B有交集  怎么用代码实现B中值在A中的位置?并将B中不是交集的部分 筛选出来?  例如 A[1,2,3,4,5,6,7,8,9]     B[12,3,8,11,9,13,]    ...
求大神指点!
现在有一个list集合,里面的数据是这样:{消息, 消息, 消息, 消息, 消息, 消息, 消息, 消息, 消息, 消息, 消息, 消息, 评论, 评论, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯, 通讯...
自制串口调试助手
自制串口调试助手,参照网上的代码资源,可以实现基本功能,求各路大神指点
人事资源管理系统
SSH框架+MySQL做的一个人事管理系统,需要的可以借鉴下,不足之处求大神指点
tomact启动错误求大神指点
三月 06, 2018 9:48:28 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:fram...
Idea tomcat报错,求大神指点~~~
SEVERE: A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].
Android6.0编译报错求大神指点
Installing recovery patch to system partition Warning: could not find SYSTEM/build.prop in  using prebuilt recovery.img from BOOTABLE_IMAGES... using prebuilt boot.img from BOOTABLE_IMAGES... Trac
AE开发求大神指点
未处理 System.Runtime.InteropServices.COMException HResult=-2147467259 Messa 是在做图层空间连接过程中遇到的问题,相同图层间可以运行通过,但是不同图层做连接就会出现上面的问题,求大神指点