SpringMVC中的RedirectAttribute类[表单验证]

RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的。
<mark>可以用来制作表单验证:</mark>
<1>用户检查接口:

public interface UserService {
   

    User checkUser(String username, String password);
}

<2>用户JPA接口:用户与数据库建立连接并可以对数据库进行操作DML操作

//<User,Long> 操作对象和主键类型
@Component
public interface UserRepository extends JpaRepository<User,Long> {
   
     User findByUsernameAndPassword( String username, String password);
}

<3>用户服务的实现类(用于返回对数据库操作的结果):

@Service
public class UserServiceImpl implements UserService {
   

    @Autowired  //接口注入
    public UserRepository userRepository;

    //检查用户密码是否正确,findByUsernameAndPassword是规定这样写的
    @Override
    public User checkUser(String username, String password) {
   
        User user = userRepository.findByUsernameAndPassword(username, password);
        return user;
    }
}

一旦使用关于Spring的注解出现在类里,例如我在实现类中用到了@Autowired注解,被注解的这个类是从Spring容器中取出来的,那调用的实现类也需要被Spring容器管理,加上@Component
作者:转角遇到抢劫的_0c47
链接:https://www.jianshu.com/p/8d3f5cede6bf
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

例如上述的UserRepository 属性注入。
扩展:

@controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层

@service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理

@repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件

@component (把普通pojo实例化到spring容器中,相当于配置文件中的(相当于配置文件中的<bean id="" class=""/>)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller@Services等的时候),我们就可以使用@Component来标注这个类。

<4>后台控制器:

// @RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
    @PostMapping("/login")  //Post提交参数后@RequestParam绑定到控制器上
    public String login(@RequestParam  String username,
                        @RequestParam  String password,
                        HttpSession session,
                        RedirectAttributes attributes){
   
        User user = userService.checkUser(username,password);  //检查用户名密码的正确性
        if(user != null){
     //查询成功
            user.setPassword(null);   //密码为了安全起见不要返回到session中
            session.setAttribute("user",user);  //存入session
            return "admin/index";   //返回首页
        }else{
   
// 重定向之后在URL后面拼接参数并返回给前端界面
            attributes.addFlashAttribute("message","用户名和密码错误!");
            return "redirect:/admin";   //返回adminA
        }
    }

重定向到前端有两种带参的方式:RedirectAttributes redirectAttributes

1.redirectAttributes.addAttribute(“param”, value);

这种方法是在重定向之后在URL后面拼接参数value

2.redirectAttributes.addFlashAttribute(“param”, value);

这种方法可以在URL后面隐藏参数,原理是将参数放到Session中,在Session跳转到页面后就会马上被移除,所以刷新页面后值会丢失,进而保证了数据的安全性。

这个方法只能在重定向的页面上使用EL表达式取值,如果是重定向到Controller中是无法获取param中的value,需要在重定向的目标方法上添加对应的形参@RequestPrama(value = “prama”)String prama才能获取参数。
通过上下文的message取值:

<div class="ui negative mini message" th:text="${message}" th:unless="${#strings.isEmpty(message)}" >
  用户名和密码错误!
</div>

通过th:text="${message}"得到后台返回的数据,使用的Thymeleaf模板的if和unless进行逻辑判断然后渲染界面。

参考:https://www.cnblogs.com/RoddeHope/p/7439643.html

全部评论

相关推荐

会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
云边有个小卖铺儿:校招生违约率低,所以我要高😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务