RequestToViewNameTranslator不起作用

时间:2016-09-03 09:52:20

标签: java spring spring-mvc

我正在阅读“弹簧框架入门”一书(第二版)。在ch11-bankapp中,带有@ModelAttribute的函数不返回视图名称。因此,视图名称应该由RequestToViewNameTranslator返回。

#![feature(unboxed_closures)]
#![feature(fn_traits)]
struct MyFun {
    pub v: usize,
}

impl FnOnce<(usize,)> for MyFun {
    type Output = Option<usize>;
    extern "rust-call" fn call_once(self, args: (usize,)) -> Self::Output {
        Some(self.v + 1 + args.0)
    }

}

impl FnMut<(usize,)> for MyFun {
    extern "rust-call" fn call_mut(&mut self, args: (usize,)) -> Self::Output {
        self.v += 1;
        if self.v % 2 == 0 {
            Some(self.v + args.0)
        } else {
            None
        }
    }
}

impl Clone for MyFun {
    fn clone(&self) -> Self {
        MyFun{v: self.v}
    }
}

fn main() {
    let possible_children = (0..10).flat_map(MyFun{v:0});
    let pairs = possible_children.clone().flat_map(|x| possible_children.clone().map(move |y| (x,y) ) );
    println!("possible_children={:?}", pairs.collect::<Vec<_>>());
}

但是,当我输入网址http://localhost:8080/ch11-bankapp/fixedDeposit/list时,它会向我提供HTTP状态404 - 错误。 控制台给我以下警告

WARN org.springframework.web.servlet.PageNotFound - 在DispatcherServlet中找不到带有URI [/ ch11-session-attributes / fixedDeposit / list]的HTTP请求的映射,名称为&#39; bankapp&#39; < /强>

有人可以解释一下为什么吗?

p.s我正在运行本书的源代码。本书假定代码是完美的。但它没有用。

1 个答案:

答案 0 :(得分:1)

我尝试了这个例子,它的工作就像一个魅力。
确保您已完成以下操作

1)配置viewNameTranslator

    <bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestTo‌​ViewNameTranslator"/‌​>
  

如果未提供视图名称,则RequestToViewNameTranslator接口&gt;会自动确定视图名称。为此,您需要在Spring MVC配置文件中配置&gt; DefaultRequestToViewNameTranslator类   取自上面提到的教程

2)在WEB-INF / jsp文件夹下创建一个文件夹fixedDeposit(如果你配置了一些其他的View解析器,而不是将fixedDeposit文件夹放在该文件夹中,例如在我的情况下,我使用了freemarker(WEB-INF / templates) ,我希望它能以同样的方式为jsp工作)

  

RequestToViewNameTranslator这是一个特殊的bean,可以解析请求中的视图名称。默认情况下,通过从请求中删除URI路径并删除媒体类型来解析视图名称。因此,例如,如果请求发送到http://host:port/context/servlet/some/path/in/the/app.html,则默认情况下视图将被解析为&#34; app&#34; - 删除路径和.html后缀。因此,您的观点应为http://host:port/context/servlet/some/path/in/the/app

3)您的视图文件名应为list.jsp(在我的情况下为list.ftl),并将您的视图文件放在新的WEB-INF \ jsp \ fixedDeposit文件夹中

现在应该可以了。 接下来在提出您的问题时,请提供完整的背景信息,例如:我真的希望看到你的application-context.xml文件,以帮助回答你的问题。 如果你有根本原因的例外,那么更加理解更详细的堆栈跟踪