Cha*_*dni 23 java redirect jsp spring-mvc
我是Spring的新手
我也在stackoverflow中搜索过web和相关帖子.我找不到我真正需要的那个.
我的目标是在重定向期间将模型属性从控制器传递到jsp页面,并避免在URL中显示属性.
以下是使用jdo验证从数据存储区登录.
我的控制器:
@Controller
public class LoginController {
int count;
PersistenceManager pm = PMF.get().getPersistenceManager();
//Instance of data class
User user;
ModelAndView modelAndView=new ModelAndView();
@RequestMapping(value="/Login",method = RequestMethod.POST)
public ModelAndView loginValidate(HttpServletRequest req){
//Getting login values
String uname=req.getParameter("nameLogin");
String pswd1=req.getParameter("pswdLogin");
count=0;
user=new User();
//Generating Query
Query q = pm.newQuery(User.class);
q.setFilter("userName == userNameParam");
q.declareParameters("String userNameParam");
try{
List<User> results = (List<User>) q.execute(uname);
for (User u: results) {
String userName=u.getUserName();
if(userName.equals(uname)){
System.out.println(u.getPassword());
if(u.getPassword().equals(pswd1)){
count=count+1;
modelAndView.setViewName("redirect:welcome");
modelAndView.addObject("USERNAME",uname);
return modelAndView;
}
//rest of the logic
}
Run Code Online (Sandbox Code Playgroud)
JSP:
<h1>Welcome ${USERNAME} </h1>
Run Code Online (Sandbox Code Playgroud)
我的URL是/welcome?USERNAME=robin
我的目标是将其显示为/welcome
此外,我的页面应该显示"欢迎知识",而它只显示欢迎.请让我知道如何解决它.
提前致谢!
Ser*_*sta 61
您应该使用Spring MVC 的flash属性工具.如果希望在重定向后可以访问数据,则不要将其添加到模型(__CODE__,__CODE__或__CODE__)中,而是添加到__CODE__控制器方法中作为参数获取的数据.
@RequestMapping(value="/Login",method = RequestMethod.POST)
public RedirectView loginValidate(HttpServletRequest req, RedirectAttributes redir){
...
redirectView= new RedirectView("/foo",true);
redir.addFlashAttribute("USERNAME",uname);
return redirectView;
}
Run Code Online (Sandbox Code Playgroud)
这些flash属性通过会话传递(并在使用后立即销毁 - 有关详细信息,请参阅Spring参考手册).这有两个好处:
你需要在这里小心,因为我认为你想要做什么并不是有充分理由支持的.在"重定向"指令将发出GET请求控制器.的GET请求只应使用请求参数检索现有状态,这是该方法的合同.该GET请求不应该依赖于先前的交互,也不应该依赖于存储在会话中的某些对象的任何对象.GET请求旨在检索现有(持久)状态.您的原始(POST)请求应该保留您需要的所有内容GET请求以检索状态.
在这种情况下,RedirectAttributes并不是为了支持你而设计的,即使你设法正确使用它,它也只能工作一次,然后它们就会被销毁.如果您随后刷新浏览器,则会出现应用程序错误,因为它无法再找到您的属性.