zoukankan      html  css  js  c++  java
  • 做add添加业务时,字符集乱码,form标签库,button的href 问题,添加后页面跳转,forward,redirect 。定制错误输出

    在做添加add业务时,需要用springmvc的标签库,<form:input path="username">,指定其path属性,然后在form的指定modelattribute的属性。再在controller方法中传入bean。(开时显示时传入,类似bean的占位符,在正式添加时也要传入),在bean里,可以添加jsr303校验。

    1.  在用springmvc 添加到 数据库中时,中文乱码,解决办法为 在web.xml文件中,添加如下(可以试着添加到web.xml的最上面)

    <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    然后在数据库中,建立表时,用utf8编码存储。

    2. form标签,在用springmvc时,必须用springmvc提供的标签才能完成封装bean,使用springmvc的标签后,仍然可以使用bootstrap的class样式

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

    3.再用bootstrap时,button添加href跳转,直接用a标签,包围button即可。

    <a href="${pageContext.request.contextPath }/addRolePage"><button type="button" class="btn btn-primary" style="margin-bottom: 8px; float: right" >新增</button></a>

     4.用redirect跳转后,有时不更新页面,但用forward跳转,可以更新。后来测试,用redirect;/getRoles也可以更新。

        @RequestMapping("/addRole")
        public String addRole(Role role) {
            
            roleService.addRole(role);
          //  return "forward:/getRoles";  用这个,在提交后,强制刷新,有重复提交的问题。
      return "redirect:/getRoles"; }

    5.在校验时,定制错误输出,比如我在add业务时,有一个规则,需要判断name不能重复。可以用这样的办法

    调用service的判断,是否重复,然后把这个错误加入到BindingResult,里面,加入时有默认时ObjectErrors,但是这个类不能指定path属性,改为用new FieldError("role","name","角色名称重复"),的方法

    代码如下,这样在前台<form:errors path="name">时,可以用path=“name”,就可以定制错误输出。

    @RequestMapping("/addRole")
        public String addRole(@Validated Role role,BindingResult error) {
            if(role.getName()!=null&&roleService.getRoleByName(role.getName())!=null) {
                error.addError(new FieldError("role","name","角色名称重复"));
                
            };
            if(error.getErrorCount()>0)
            {
                System.out.println("出错了!");
                
                System.out.println(error.toString());
                for(FieldError err:error.getFieldErrors()){
                    System.out.println(err.getField() + ":" + err.getDefaultMessage());
                   
                }
                
             return "addRolePage";
            }
            
            roleService.addRole(role);
            return "redirect:/getRoles";
        }

    另外在做删除业务时,在判断是否能删除后,如果不能删除,给前台一个警告提示,这时可以用ModelAndView,然后把错信息添加给mv,再跳转,跳转后,需要加载原来的list数据,这时必须用forward,否则没有提示信息。forward的浏览器属性数据可以共享,且地址不变。但是redirect则不同

    @RequestMapping("/roleDel/{id}")
        public ModelAndView roleDel(@PathVariable("id") Integer id,Role role,BindingResult error) {
            ModelAndView mv = new ModelAndView("forward:/getRoles");
            Integer deleteRole = roleService.deleteRole(id);
            if(deleteRole==0) {
                error.addError(new FieldError("role", "name", "角色下有数据不为空"));
                System.out.println("error出错了"+error.toString());
                mv.addObject("roleerr", "角色下有数据,不能删除");
                System.out.println(mv.toString());
            }
            return mv;
        }

    前台页面用${roleerr}获取就可以了。

  • 相关阅读:
    【转载】总结一下Android中主题(Theme)的正确玩法
    Android获唯一标识
    AS问题解决系列3—iCCP: Not recognizing known sRGB profile
    AS问题解决系列1—Unable to execute DX错误
    Android Studio Error2
    Android Error
    NAT简单介绍
    redis缓存工具Jedis进行跨jvm加锁(分布式应用)--不幸暂弃用--能够做第三方锁使用
    工作总结1.怎样高效跟客户确定需求?
    Sqoop处理Clob与Blob字段
  • 原文地址:https://www.cnblogs.com/sdgtxuyong/p/12022585.html
Copyright © 2011-2022 走看看