【问题标题】:Default formView for SimpleFormController?SimpleFormController 的默认 formView?
【发布时间】:2011-03-18 06:04:57
【问题描述】:

首先我想说我对 Spring(尤其是 MVC 框架)还很陌生,只是想了解一切是如何工作的,所以请放轻松。

我正在使用我创建的虚拟应用程序,并且我创建了一个简单的登录表单,用户可以通过 /login.html bean 访问该表单。 bean定义如下:

<bean name="/login.html" class="test.controller.LoginController">
    <property name="successView" value="list_messages.html" />
    <property name="commandClass" value="test.domain.Login" />
    <property name="commandName" value="login" />
</bean>

Login 类是一个简单的对象,其中包含用户名和密码字段以及适当的 getter 和 setter)。

LoginController 类目前几乎什么都不做:

public class LoginController extends SimpleFormController
{
    @Override
    protected ModelAndView onSubmit(Object command, BindException errors) throws Exception
    {
        return new ModelAndView(new RedirectView(getSuccessView()));
    }
}

现在我的 bean 定义文件中有一个视图解析器,如下所示:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

为了支持我的登录表单,我的 jsp 目录中有一个 login.jsp 文件。

我的问题如下:为什么访问 /login.html 会将我重定向到 login.jsp?我没有为我的表单指定 formView 属性,那么视图解析器如何知道将我重定向到 login.jsp?

提前感谢您的帮助!

约瑟夫。

【问题讨论】:

  • 你为什么使用 RedirectView 类?

标签: spring-mvc


【解决方案1】:

当不指定逻辑视图名时,Spring 依赖DefaultRequestToViewNameTranslator默认安装。因此,如果您的请求类似于

http://127.0.0.1:8080/app/<LOGICAL_NAME_EXTRACTED_BY_VIEW_NAME_TRANSLATOR_GOES_HERE>.html

你看过 ???所以如果你的要求是

http://127.0.0.1:8080/app/login.html

ViewNameTranslator 提取的逻辑名称是 login,提供给 viewResolver 和 Translated To

/jsp/login.jsp

没有别的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多