zoukankan      html  css  js  c++  java
  • springmvc CRUD控制器写法和jsp页面写法 总结大全。

    本例介绍控制器和jsp页面的写法,分两部分。

    本文中,jsp页面,一共有3个,浏览页面,增加页面,修改页面。

    控制器一共有6个。浏览getAuthors,增加页面跳转authorAdd,增加业务authorSave,修改页面跳转authorModify,修改业务authorUpdate,删除业务authorDel。

    一、控制器

    1,入参。

    其中控制器中,需要带id传值的,有2个,一个删除业务,一个是修改页面跳转。这里两个同样需要路径参数注解。

    带bean传值的,有3个,一个是增加页面跳转,一个是增加业务,一个是修改业务。

    带BindingResult,error返回值的,有2个,一个是增加业务。一个是修改业务。

    带Valid校验bean的,也是2个,一个是增加业务。一个是修改业务。

    带路径参数注解 @PathVariable的,有2个。一个是删除业务,一个是修改页面跳转。

    带请求参数注解 @RequestParam 的,有1个,浏览所有getAuthors。且该请求参数后需要跟着实参。

    代码如下:

    @Controller
    public class ZhouyiAuthorController {
        
    
        @Autowired
        private ZhouyiAuthorService zhouyiAuthorService;
        
        @RequestMapping("/getAuthors")
        public ModelAndView getAuhoros(@RequestParam(value="pn",defaultValue = "1")Integer pn) {
            PageHelper.startPage(pn, 12);
            ModelAndView mv = new ModelAndView("zhouyiAuthor");
            List<ZhouyiAuthor> zhouyiContentAuthors = zhouyiAuthorService.getZhouyiContentAuthors();
            PageInfo page = new PageInfo(zhouyiContentAuthors,7);
            mv.addObject("pageinfo", page);
            return mv;
        }
        
        @RequestMapping("/zhouyiAuthorDel/{id}")
        public ModelAndView zhouyiAuthorDel(@PathVariable("id") Integer id) {
            ModelAndView mv = new ModelAndView();
            List<ZhouyiAuthor> zhouyiAuthorsFromContents = zhouyiAuthorService.getZhouyiAuthorsFromContents(id);
            if(zhouyiAuthorsFromContents.size()>0) {
                mv.addObject("errors", "*该作者下有子类目,不允许删除!");
                mv.setViewName("forward:/getAuthors");
                return mv;
            }
            int deleteZhouyiContentAuthor = zhouyiAuthorService.deleteZhouyiContentAuthor(id);
            if(deleteZhouyiContentAuthor!=1) {
                mv.addObject("errors", "*删除异常!");
                mv.setViewName("forward:/getAuthors");
                return mv;
            }
            
            mv.setViewName("redirect:/getAuthors");
            return mv;
        }
        
        @RequestMapping("/zhouyiAuthorAdd")
        public ModelAndView zhouyiAuthorAdd(ZhouyiAuthor zhouyiAuthor){
            ModelAndView mv = new ModelAndView("zhouyiAuthorAdd");
            return mv;
        }
        
        @RequestMapping("/zhouyiAuthorSave")
        public ModelAndView zhouyiAuthorSave(@Valid ZhouyiAuthor zhouyiAuthor,BindingResult errors) {
            ModelAndView mv = new ModelAndView();
            if(errors.getFieldErrorCount()>0) {
                for (FieldError err : errors.getFieldErrors()) {
                System.out.println("err.field:= "+err.getField()+ "  | message:==="+ err.getDefaultMessage());
                }
                mv.setViewName("zhouyiAuthorAdd");
                return mv;
            }
            zhouyiAuthorService.addZhouyiContentAuthor(zhouyiAuthor);
            mv.setViewName("forward:/getAuthors");
            return mv;
        }
        
        @RequestMapping("/zhouyiAuthorModify/{id}")
        public ModelAndView zhouyiAuthorModify(@PathVariable("id") Integer id) {
            ModelAndView mv = new ModelAndView("zhouyiAuthorModify");
            mv.addObject("zhouyiAuthor",zhouyiAuthorService.getZhouyiContentAuthorById(id) );
            return mv;
        }
        
        @RequestMapping("/zhouyiAuthorUpdate")
        public ModelAndView zhouyiAuthorUpdate(@Valid ZhouyiAuthor zhouyiAuthor,BindingResult errors) {
            ModelAndView mv = new ModelAndView();
            if(zhouyiAuthor.getOrderId()==null) {
                errors.addError(new FieldError("zhouyiAuthor", "orderId", "不能为空"));
            }
            if(errors.getErrorCount()>0) {
                mv.setViewName("zhouyiAuthorModify");
                return mv;
            }
            zhouyiAuthorService.modifyZhouyiContentAuthor(zhouyiAuthor);
            mv.setViewName("redirect:/getAuthors");
            return mv;
        
        }
        
    }

    2.jsp页面。

    有3个,如果能用springmvc标签写的,就用springmvc标签写,不要用html普通标签写,因为有一些附件功能,比如path在修改页面时,若有列表可以自动检查当前值并且选中。

     头如下:

    <title>Yiwiki - 作者</title>
    <% pageContext.setAttribute("APP_PATH", request.getContextPath()); %>
    <script  src="${APP_PATH}/static/js/jquery-1.12.4.min.js"></script>
    <link href="${APP_PATH}/static/bootstrap-3.3.7-dist/css/bootstrap-theme.css" rel="stylesheet">
    <link href="${APP_PATH}/static/bootstrap-3.3.7-dist/css/bootstrap.css" rel="stylesheet">
    <script  src="${APP_PATH}/static/bootstrap-3.3.7-dist/js/bootstrap.js" ></script>
    
    </head>
    <body>

    头文件包括如下:

    <body>
    <jsp:include page="/header.jsp"></jsp:include>
        <ol class="breadcrumb">
            <li><a href="#">Home</a></li>
            <li><a href="#">作者分类</a></li>
            <li class="active">修改</li>
        </ol>
    //下面为主体部分
    <div class="container">

     浏览页面如下:

    <div class="container">
            <span style="margin-left:3px;color:#ce4844;font-weight:bold">${errors }</span>
            
            <a href="${APP_PATH }/zhouyiAuthorAdd"><button type="button" class="btn btn-primary "
                style="margin-bottom: 8px; float: right">新增</button></a>
            <table class="table table-striped table-hover">
                <tr>
                    <td>ID</td>
                    <td>排序</td>
                    <td>作者名称</td>
                    <td>说明</td>
                    <td>操作</td>
                </tr>
    
                <c:forEach items="${pageinfo.list }" var="zhouyiAuthor">
                    <tr>
                        <td>${zhouyiAuthor.id }</td>
                        <td>${zhouyiAuthor.orderId }</td>
                        
                        <td>${zhouyiAuthor.name }</td>
                        <td>${zhouyiAuthor.info }</td>
                        <td><a href="${APP_PATH }/zhouyiAuthorModify/${zhouyiAuthor.id}"><button type="button" class="btn btn-primary btn-xs btn_edit" edit_id="${zhouyiAuthor.id }">修改</button></a>
                            <a href="${APP_PATH }/zhouyiAuthorDel/${zhouyiAuthor.id}"><button type="button" class="btn btn-primary btn-xs" onclick="return confirm('确定要删除吗?')">删除</button></a></td>
                    </tr>
                </c:forEach>
            </table>
            共${pageinfo.total }条记录,共${pageinfo.pages }页
            <nav style="float: right" aria-label="Page navigation">
                <ul class="pagination">
                    <li><a
                        href="${APP_PATH }/getAuthors?pn=1"
                        aria-label="Previous"> <span aria-hidden="true">&laquo;</span>
                    </a></li>
    
                    <c:forEach items="${pageinfo.navigatepageNums }" var="nums">
                        <c:if test="${pageinfo.pageNum == nums }">
                            <li class="active"><a
                                href="${APP_PATH }/getAuthors?pn=${nums}">${nums }</a></li>
                        </c:if>
                        <c:if test="${pageinfo.pageNum != nums }">
                            <li><a
                                href="${APP_PATH }/getAuthors?pn=${nums}">${nums }</a></li>
                        </c:if>
                    </c:forEach>
    
                    <li><a
                        href="${APP_PATH }/getAuthors?pn=${pageinfo.pages}"
                        aria-label="Next"> <span aria-hidden="true">&raquo;</span>
                    </a></li>
                </ul>
            </nav>
    
        
    
        </div>

    增加跳转页面如下:

    <div class="container">
    <form:form  modelAttribute="zhouyiAuthor" class="form-horizontal" id="saveForm"  >
    
      <div class="form-group">
     
        <label for="name" class="col-sm-2 control-label">作者</label>
        <div class="col-sm-6">
         <form:input type="text" path="name" class="form-control" id="name" placeholder="姓名" /><form:errors path="name"></form:errors>
        </div>
      </div>
      
    <div class="form-group">
        <label for="info" class="col-sm-2 control-label">说明</label>
        <div class="col-sm-6">
          <form:input type="text"  path="info" class="form-control" id="info" placeholder="备注"/><form:errors path="info"></form:errors>
        </div>
      </div>
       
        <div class="form-group">
        <label for="" class="col-sm-2 control-label"></label>
        <div class="col-sm-6" >
          <button type="submit" id="saveIndex" class="btn btn-primary" formenctype="multipart/form-data"   formaction="${APP_PATH }/zhouyiAuthorSave" formmethod="post"  >保存</button>
        </div>
      </div>
    
       </form:form>
          
        </div>

    修改页面如下:修改页面必须有隐藏的id域,以便于在modify业务时,作为入参确定唯一性。

    <div class="container">
    <form:form  modelAttribute="zhouyiAuthor" class="form-horizontal" id="saveForm"  >
    
      <div class="form-group">
     <form:hidden path="id"/>
        <label for="name" class="col-sm-2 control-label">作者</label>
        <div class="col-sm-6">
         <form:input type="text" path="name" class="form-control" id="name" placeholder="姓名" /><form:errors path="name"></form:errors>
        </div>
      </div>
      
    <div class="form-group">
        <label for="info" class="col-sm-2 control-label">说明</label>
        <div class="col-sm-6">
          <form:input type="text"  path="info" class="form-control" id="info" placeholder="备注"/><form:errors path="info"></form:errors>
        </div>
      </div>
       <div class="form-group">
        <label for="orderId" class="col-sm-2 control-label">排序</label>
        <div class="col-sm-2">
          <form:input type="text"  path="orderId" class="form-control" id="orderId" placeholder="排序"/><form:errors path="orderId"></form:errors>
        </div>
      </div>
        <div class="form-group">
        <label for="" class="col-sm-2 control-label"></label>
        <div class="col-sm-6" >
          <button type="submit" id="saveIndex" class="btn btn-primary" formenctype="multipart/form-data"   formaction="${APP_PATH }/zhouyiAuthorUpdate" formmethod="post"  >保存</button>
        </div>
      </div>
      </form:form>
        </div>

    JSR303 校验与错误跳转

    如果使用valid注解,进行bean的校验,BindingResult errors ,在页面跳转时,不能有forward和redirect修饰符,且,跳转后的页面,如果有之前关联的bean,内容被清空,需要再一次赋值一次。

    也就是说,如果用自带的jsr303校验,不能有关联的bean,或者给关联的bean在再次赋值。并且跳转时,不能有forward和redirect。

    若必须跳转到它页处理,可以用modelandview把值扶到这里,然后再跳转,不使用官方自带的错误机制。

    如下,:add页面时显示页面,save页面是业务页面。本例因为大量写入,所以没有跳转到目录浏览页面,继续留在添加页面,这里这个例子并不是很通用。

    @RequestMapping("/zhouyiContentAdd")
        public ModelAndView zhouyiContentAdd(ZhouyiContent zhouyiContent,@SessionAttribute("authorId") Integer authorId){
            ModelAndView mv = new ModelAndView();
            zhouyiContent.setContent(null);
            zhouyiContent.setInfo(null);
            mv.addObject("zhouyiAuthor", zhouyiAuthorService.getZhouyiContentAuthorById(authorId));
            mv.addObject("zhouyiYao",zhouyiYaoService.getZhouyiYaos() );
            
            mv.setViewName("zhouyiContentAdd");
            return mv;
        }
        
        @RequestMapping("/zhouyiContentSave")
        public ModelAndView zhouyiContentSave(@Valid ZhouyiContent zhouyiContent,BindingResult errors,@SessionAttribute("authorId") Integer authorId) {
            ModelAndView mv = new ModelAndView();
            
            if(errors.getErrorCount()>0) {
                mv.addObject("tips", null);
                mv.addObject("errors", "*添加保存异常!");
                mv.addObject("zhouyiAuthor", zhouyiAuthorService.getZhouyiContentAuthorById(authorId));
                mv.addObject("zhouyiYao",zhouyiYaoService.getZhouyiYaos() );
                mv.setViewName("zhouyiContentAdd");
                return mv;
            }
            zhouyiContentService.addZhouyiContent(zhouyiContent);
            mv.addObject("tips", zhouyiContent.getId()+"条,添加成功!");
            mv.setViewName("forward:/zhouyiContentAdd");
            
            return mv;
        }
  • 相关阅读:
    multipath路径残留导致虚拟机无法重启
    multipath配置错误导致的云平台虚拟机挂载云硬盘失败
    kubernetes v1.8.3安装coredns
    helm安装chart----percona-xtradb-cluster实践记录
    elasticsearch性能调优相关
    nova hypervisor-list无法执行,其他api均正常
    珍爱面经
    猫眼面经
    头条面经
    阿里秋招面经
  • 原文地址:https://www.cnblogs.com/sdgtxuyong/p/12194880.html
Copyright © 2011-2022 走看看