我有一个控制器从search.jsp中的表单中获取ID。我希望它重定向到entitydemo.jsp,它应该能够访问EntityDemo并输出其属性。我怎么做?我是否需要使用重定向并以某种方式将EntityDemo作为会话属性?
@Controller
public class SearchEntityController {
@RequestMapping(value = "/search", method = RequestMethod.GET)
public EntityDemo getEntityDemoByID(@ModelAttribute("search") Search search, BindingResult result) {
EntityDemo entityDemo = null;
if (search.getId() != null) {
int id = Integer.parseInt(search.getId());
entityDemo = DBHelper.getEntityDemo(id);
}
return entityDemo;
}
}
答案 0 :(得分:6)
假设您有一个名为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;}
。
据我所知,Controller方法不返回整个对象,它们返回表示视图名称的String
值,例如\foo\bar\myPage.jsp
或其他整个ModelAndView
对象(有两种类型的对象,其中一种具有portlet
的全名,另一种具有servlet
。在这种情况下,您必须使用其全名具有servlet
的对象。为了清楚起见,当我说出全名时,我的意思是包含它所在的包的名称。如果记忆对我很好,那么你正在寻找的就是springframework...servlet.ModelAndView
或类似的东西。
编辑:如果你想在提交时重定向,那么你需要制作2个控制器,一个将呈现表单,另一个将在提交表单后重定向。
关于JSP页面,您应该有一个xml文件名dispatcher-servlet.xml
。名称可能会有所不同,具体取决于web.xml
中的配置,但它们的结构均为<servletname>-servlet.xml
。应该有一个名为viewResolver
的属性(虽然应该是这种情况,某些IDE不会为您填充太多。另一方面,IDE等Netbeans会为您设置大部分初始配置)。这是另一个控制器,它作用于views
。它的作用是自动附加您在控制器中指定的view
名称之前和之后的项目。通常它会附加前缀pages/jsp/
和后缀.jsp
。因此,如果您有一个包含以下路径pages/jsp/myPage.jsp
的网页,则您需要传入控制器的所有内容都是myPage
。页面的完整路径将由视图解析器构建。如果您传入整个URL,它仍会继续添加内容,因此即使您指定了正确的路径,仍无法找到该页面。
答案 1 :(得分:0)
我在控制器中使用2种方法让它工作 - 一种用于显示表单,另一种用于搜索结果
控制器:
@Controller
public class SearchEntityController {
@RequestMapping(value = "/search", method = RequestMethod.GET)
public void searchForm(Model model) {
model.addAttribute(new Search());
}
@RequestMapping(value = "/entitydemo", method = RequestMethod.POST)
public void showSearchResult(@ModelAttribute Search search, Model model) {
model.addAttribute("entityDemo", getEntityDemo(search));
}
// code to load entity here
}
(搜索是一个包含int id
和访问者的类
search.jsp中的表单:
<form:form action="entitydemo" commandName="search">
ID: <form:input path="id" />
</form:form>
在entitydemo.jsp中显示结果:
<core:out value="${entityDemo.foo}" /> <br/>
<core:out value="${entityDemo.bar}" />