2

我有一个从 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;
  }
}
4

2 回答 2

6

假设您有一些名为的类,EntityDemo它具有所有字段,我认为您应该这样做:GettersSetters

@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全名中的那个。为了清楚起见,当我说全名时,我指的是包含它所在的包的名称。如果我没记错的话,你正在寻找的那个for is inspringframework...servlet.ModelAndView或类似的东西。

编辑:如果您想在提交时重定向,那么,您将需要制作 2 个控制器,一个将呈现表单,另一个将在提交表单后重定向。

关于您的 JSP 页面,您应该有一个 xml 文件名dispatcher-servlet.xml。名称可能不同,具体取决于您在 中的配置web.xml,但它们都具有<servletname>-servlet.xml. 应该有一个名为的属性viewResolver(虽然应该是这种情况,但某些 IDE 不会为您填充太多内容。另一方面,诸如 Netbeans 之类的 IDE 会为您设置大部分初始配置)。这是另一个作用于您的views. 它的作用是自动在您view在控制器中指定的名称之前和之后附加项目。通常它附加一个前缀pages/jsp/和一个后缀.jsp。因此,如果您有一个包含以下路径的页面pages/jsp/myPage.jsp,那么您需要传入控制器的只是myPage. 页面的完整路径将由视图解析器构建。如果您传入整个 URL,它仍会继续添加内容,因此即使您指定了正确的路径,仍然无法找到该页面。

于 2012-04-15T08:36:14.097 回答
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
}

(搜索是一个带有 anint 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}" />
于 2012-04-15T21:25:09.777 回答