2012-04-15 13 views
2

私はsearch.jspのフォームからIDを取得するコントローラを持っています。 entitydemo.jspにリダイレクトして、EntityDemoにアクセスしてその属性を出力できるようにする必要があります。それ、どうやったら出来るの?私はリダイレクトを使用してEntityDemoをセッション属性として何らかの形で置く必要がありますか?私の最初のSpring webappを動作させるには

あなたはすべてのフィールドの GettersSettersを持って 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

私はそれが私のコントローラ内の2つの方法を使用して動作するようになった - 検索するためのフォームと別のものを表示するには1が

コントローラー結果:検索int idとアクセサを持つクラスである(

@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 
} 

を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}" /> 
6

@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はフルネームで、もう1つはservletです。この場合、フルネームでservletのものを使用する必要があります。わかりやすくするために、フルネームと言うとき、そのパッケージが含まれる名前を意味します。あなたが探しているものが好きであれば、springframework...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全体を渡しても、それでも追加情報が残るため、正しいパスを指定してもページが見つからない場合があります。

+0

@Michael:私は自分の答えを変更しました。春のXMLファイルは非常に重要であり、ほとんどの場合、ソリューションが機能していない理由があります。一度それを取得すると、Springが開発をスピードアップすることがわかります。 – npinti

+0

乾杯。私はついにそれを働かせました。私は実際に2つのメソッドを持つ1つのコントローラを使用しています。フォームを表すクラスをフォームのページに表示するクラスと、エンティティをロードしてモデルに(結果ページのために)配置するメソッドを配置するメソッドです。 – Michael

+0

@マイケル:そうです、あなたは同じクラス(コントローラ)を使って複数のメソッドを持つことができます。私の答えが助けてくれてうれしい。 – npinti

関連する問題