假设你有一些类名为EntityDemo
这对于所有字段Getters
和Setters
,我认为你应该做的事情,像这样:
@Controller
public class SearchEntityController {
@RequestMapping(value = "/search", method = RequestMethod.GET)
public ModelAndView getEntityDemoByID(@ModelAttribute("search") Search search, BindingResult result) {
EntityDemo entityDemo = null;
Map<String, Object> model = new HashMap<String, Object>();
if (search.getId() != null) {
int id = Integer.parseInt(search.getId());
entityDemo = DBHelper.getEntityDemo(id);
model.put("entityDemo", entityDemo);
}
return new ModelAndView(new RedirectView(pageIWantToRedirectTo), model);
}
}
然后,在你的JSP,你可以使用JSTL
并做这样的事情:${entityDemo.name}
,其中name
是一个字段,我假设EntityDemo
类与适当的Getter
一起,这是public String getName(){return this.name;}
。
据我所知,控制器方法不返回整个对象,他们要么返回String
值,其表示视图的名称,如\foo\bar\myPage.jsp
否则,整个ModelAndView
对象(有2种类型的对象,其中一人全称为portlet
,另一个为servlet
,在这种情况下,您必须使用全名为servlet
的那个。为了清楚起见,当我说全名时,我的意思是包含它所在的包的名称。如果内存为我服务,那么你正在寻找的是springframework...servlet.ModelAndView
或类似的东西
编辑:如果你想重定向提交时,您需要制作2个控制器,一个将呈现表单,另一个将在表单提交后重定向。
关于您的JSP页面,您应该有一个xml文件名称dispatcher-servlet.xml
。名称可能不同,具体取决于您在web.xml
中的配置,但它们都具有<servletname>-servlet.xml
的结构。应该有一个名为viewResolver
的属性(虽然应该是这种情况,但某些IDE不会为您提供太多的功能)另一方面,NetBeans IDE等IDE为您设置了大部分初始配置。这是另一个控制器,它会影响您的views
。它的作用是自动追加在您的控制器中指定的名称前后的项目。通常它会附加pages/jsp/
的前缀和.jsp
的后缀。因此,如果您的页面的路径为pages/jsp/myPage.jsp
,则您需要通过控制器的网页将为myPage
。页面的完整路径将由视图解析器构造。如果您传递整个网址,它仍然会继续添加内容,因此即使您指定了正确的路径,也仍然无法找到该网页。
@Michael:我修改了我的答案。春天的XML文件非常重要,在大多数情况下,这将是您的解决方案无法正常工作的原因。一旦你掌握了它,你会发现Spring将加速你的发展。 – npinti 2012-04-15 11:10:46
干杯。我终于搞定了。实际上,我使用两种方法使用一个控制器 - 一种是将表示表单的类放在模型(用于表单页面)上,另一种将实体加载并放在模型(用于结果页面)上。 – Michael 2012-04-15 21:18:26
@迈克尔:是的,你是正确的,你可以有多个方法使用相同的类(控制器)。很高兴我的回答有帮助。 – npinti 2012-04-16 05:03:47