2011-11-09 10 views
3

私はこの方法を必要以上に混乱させました。ここに簡略版があります。スプリングMCFフォームが別のコントローラに投稿されている、またはこれを超えている

1 - 右上のすべてのページにドロップダウンと送信ボタンがあります。ドロップダウンは言語のリストです。ユーザーは言語を変更し、送信ボタンを押して言語コントローラーにアクセスし、現在の言語を更新することができます。

public class LanguageController { 

    @ModelAttribute("languageList") 
     public LanguageList populateLanguageList() { 
      return LanguageDAO.all(); 
     } 

     @RequestMapping("/setLanguage.mvc") 
     public ModelAndView setLanguage(
      @ModelAttribute("languageForm") LanguageForm languageForm, 
       HttpServletRequest request, 
       HttpServletResponse response 
       ){ 
      //do stuff 
     } 
    } 


<form:form modelAttribute="languageForm"> 
    <form:select path="acctGrpId" > 
     <form:options items="${languageList}"/> 
    </form:select> 
     <input type="submit"/> 
</form:form> 

どのようにすべてのページで利用できるようにするのですか?ページが、ユーザーを編集/作成しているページで、そのページの「コントローラー」が実際にはUserController、RoleController、またはDepartmentControllerであり、LanguageControllerではないことを前提とします。ページが何をしているかにかかわらず、この特定のJSPを特定のコントローラに当てる必要があります。

答えて

2

異なるアクション属性を異なる形式で指定するだけです。 1ページに複数のフォームを置くことに問題はありません。あなたのケースでは

それは次のようになります。

<form action="Context/adduser.mvc"> 
</form> 

<form action="Context/addBookmark.mvc"> 
</form> 

など

+0

私はちょうど私のポストを更新しました、うまくいけば、私の実際の問題は、同じJSPで複数のコントローラを持っていることが今より意味があります。どのようにページコントローラが設定されているかにかかわらず、jspページに "このコントローラを使用する"と言う方法を教えてください。 – samwise

+0

多分私はまだそれを取得しないか、私が書いたものはまだ立っています。フォームタグに異なるアクション属性を指定するだけです。そうすれば、LanguageControllerが提供するフォームがそこに提供され、実際のページのフォームはページのコントローラによって提供されます。 – soulcheck

0

私はあなたのお手伝いをしたいと思いますが、あなたの要件が不明です。

BookMarkControllerにはさまざまなメソッドがあり、メソッドの呼び出しを追加/アップロードしていますか?

BookMarkControllerに複数のフォームが必要な場合は、

詳細を教えてください。

私は、すべてのjspページが、リンクがクリックされたときにフォームを保存できるコントローラにデータを送信したいと思っています。これは非常に簡単です。すべてのコントローラにsavePageメソッドを追加し、それに応じてuriをマップすることができます。savePageメソッドでは、ページを保存するために書き込んだ特定のコントローラにリクエストをリダイレクトできます。

これが役に立ちます。

+0

方法については、この:全体のアップロードユーザーの事を無視してください - あなたは(JSPをJSPが含まれる可能性のあるページの場合: include path = "bookmark.jsp")、そのbookmark.jspページにはスプリングフォームがあり、そのフォームはブックマークコントローラに接続されています。どうなっていますか?そのJSPはどのように見えますか?JSPが「現在の」ページで定義されたコントローラの代わりにブックマークコントローラをヒットするようにするにはどうしたらいいですか? – samwise

0

あなたのJSPは、あなたのコントローラから独立している図です。 MVCの美しさ、モデル、ビュー、コントローラの分離です。必ずしもビューがコントローラーまたは「現在の」コントローラーを持つページに結びついていると考えるべきではありません。はい、私たちはしばしばコントローラをかなり強くしています。なぜならコントローラはモデルの属性を取り込んでビューをレンダリングし、ビュー内のアクションの結果としてフォームのポストを処理するからです。しかし、実際にコントローラはビ​​ューを返すことができます。モデルは正しく、任意のビューは任意のコントローラに送信できます。ビューは、それに続くURLに応じて、異なる時間に異なるコントローラに送信することさえできます。

あなたのケースでは、soulcheckによれば、フォームが送信するURLを変更するだけです。コントローラは@RequestMappingによってマッピングされるので、フォームのアクションを変更すると、Spring MVCが適切なRequestMappingを見つけることができる限り、フォームが送信されるときに呼び出されるコントローラクラスおよび/またはメソッドが変更されます。

+0

ああ!これは、私がハングアップしたモデルの人口です。必ずしもRequestMappingである必要はありません。例えば、$ {languageList}はUserControllerで利用できないでしょう。では、どのようにしてLanguageControllerから$ {languageList}値を取得するのですか...ある時点で、言語リストを取得してフォームを作成できるように、「言語コントローラを取得してください」と言わなければなりません。そこから、私はLanguageControllerにポストすることができますが、データを取得することは私が固執しているところです – samwise

+0

私はそれを行うときに、コントローラを単にビューに必要なデータのアグリゲータとして使用しようとします。彼らはデータを取得するための作業を一切しません。あなたのケースでは、languageList(データベース、プロパティ、どこからでも)を取得するメソッドを持つサービスクラスまたはユーティリティクラスがあり、両方のコントローラがそのメソッドを呼び出してモデルを正しく設定できます。コントローラをできるだけ自律的に保つようにしています。コントローラを別のコントローラに依存させたくないのですが、それは個人的な好みです。 – digitaljoel

+0

あるいは、languageListをセッション属性に入れるだけです。 – GriffeyDog

関連する問題