假設你有一些類名爲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