如何在spring mvc控制器中传递查询?

时间:2013-01-14 06:26:34

标签: java spring java-ee spring-mvc

假设你在普通的servlet中有这样的东西,而不使用spring mvc:

if(username == "X" && password =="Y"){
  response.sendRedirect("./user/welcomePage.jsp");
}else{
  response.sendRedirect("./login.jsp?wrongPass=true");
 }

如果用户名&&密码错误,重定向到login.jsp页面后,通知用户用户名或密码错误,在login.jsp页面的某处红色:

<p style="color:red";
 <%= (request.getParameter("wrongPass")==null)? "visibility:hidden":"" %>;">
    Your username/password is wrong !</p>

我的问题是,有没有办法传递像:

这样的论点
response.sendRedirect("./login.jsp?wrongPass=true");

在Spring MVC控制器内部?

如果我们有这样的控制器:

@Controller
@RequestMapping(value ="/")
public class Welcome{
public String welcome(@RequestParam("j_username") String username, 
        @RequestParam("j_password") String password){
       .
       .
       .
   return "login";

作为日志我们需要返回一个String来形成一个页面&amp;因为我们定义了InternalResourceViewResolver:

<bean >class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/views/" />
   <property name="suffix" value=".jsp" />
</bean>

如果我们在控制器中传递参数,如:return“login?wrongPass = true” 使用InternalResourceViewResolver后会创建类似:

login?wrongPass=true.jsp   Which is totally wrong ...

现在,解决这个问题的解决方案是什么(没有)将String添加到我们的控制器内部的模型中。在JSP中获取参数? 我希望浏览器网址变为:

http://localhost:8080/myProject/login.jsp?wrongPass=true

1 个答案:

答案 0 :(得分:1)

您可以使用重定向前缀,然后可以使用绝对URL

return "redirect:http://localhost:8080/myProject/login.jsp?wrongPass=true";

您也可以使用HttpServletRequest

的方法动态构建绝对URL