SimpleFormController的默认formView吗?


问题内容

首先,我想说我对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?

在此先感谢您的帮助!

约瑟夫。


问题答案:

如果不指定逻辑视图名称,春秋依靠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

没有其他的