2

search.jsp のフォームから ID を取得するコントローラーがあります。EntityDemo にアクセスしてその属性を出力できる必要がある entitydemo.jsp にリダイレクトする必要があります。それ、どうやったら出来るの?リダイレクトを使用して、何らかの方法で 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}nameEntityDemoGetterpublic String getName(){return this.name;}

私の知る限り、コントローラーメソッドはオブジェクト全体を返すのではなくString、ビューの名前を示す値を返す\foo\bar\myPage.jspか、オブジェクト全体を返しModelAndViewます (オブジェクトには 2 種類あり、1 つはportlet完全な名前で、もう1 つは完全な名前になっています)。を持っていservletます. この場合, フルネームに が含まれているものを使わなければなりませんservlet. わかりやすくするために, フルネームと言うときは, それが存在するパッケージを含む名前を意味します. 記憶がよければ, あなたが探しているもの. for is inspringframework...servlet.ModelAndViewまたはそのようなものです。

編集: 送信時にリダイレクトする場合は、2 つのコントローラーを作成する必要があります。1 つはフォームをレンダリングし、もう 1 つはフォームが送信されるとリダイレクトします。

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つのメソッドを使用して動作させました.1つはフォームを表示し、もう1つは検索結果を表示します

コントローラ:

@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}" />
于 2012-04-15T21:25:09.777 に答える