RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的。
可以用来制作表单验证:
<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进行逻辑判断然后渲染界面。