【问题标题】:Redirect between pages - Spring MVC页面间重定向 - Spring MVC
【发布时间】:2013-02-22 09:17:08
【问题描述】:

我从Spring Portlet MVC 开始,但我相信这个问题也适用于Spring MVC。让我给你看这个例子

@Controller
@RequestMapping(value="VIEW")//this maps to Portlet Mode VIEW
public class LoginController {

    @RenderMapping("action=showRegisterPage")
    //this annotation is almost the same like @RequestMapping
    public String showRegisterPage() {
        return "registration";
    }

    @ModelAttribute("loginForm")
    public LoginForm getLoginForm() {
        return new LoginForm();
    }
}

然后是注册页面的控制器

@Controller
@RequestMapping(value="VIEW")
public class RegistrationController {

    @ModelAttribute("user")
    public User getUser() {
        return new User();
    }
}

问题是,当我从页面调用 showRegisterPage 方法(操作)时,我被重定向到registration.jsp,但是会发生这种异常

Caused by: java.lang.IllegalStateException: Neither BindingResult nor 
plain target object for bean name 'user' available as request attribute

这可以通过将ModelAttribute 用户添加到 LoginController 来解决,但代码重复并不是真正正确的方法,那么我该如何正确解决这个问题?我也尝试将 showRegisterPage 方法移动到 RegistrationController 但链接不起作用。也许有人可以详细说明将页面绑定到某个控制器是如何工作的?

附: index.jsp 和registration.jsp 都包含<form:form> 标签,我还省略了两个控制器的样板代码。

【问题讨论】:

  • 需要将“用户”属性添加到模型中,然后将自动绑定到请求范围。没有它,就会有错误。请参阅 Georgy 的回答。

标签: java spring spring-mvc controller spring-portlet-mvc


【解决方案1】:

抛出异常是因为当您进入注册页面模型时没有用户属性。我猜你的注册页面包含这样的东西

<form:form commandName="user" >

这就是为什么当您将此代码粘贴到第一个控制器时,错误消失了

@ModelAttribute("user")
public User getUser() {
    return new User();
}

此代码为模型提供用户对象。 如果您不想将一种方法复制两次,则可以

@RenderMapping("action=showRegisterPage")
//this annotation is almost the same like @RequestMapping
public String showRegisterPage(Model model) {
    model.addAttribute("user", new User());
    return "registration";
}

在这种情况下,模型将包含用户对象。

【讨论】:

    【解决方案2】:

    理想情况下,showregistrationpage 方法应该是注册控制器而不是登录控制器的一部分。

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      相关资源
      最近更新 更多