0

Spring MVC をサポートする OpenMRS という名前のオープン ソースに取り組んでいます。後で更新目的でコア ソースを変更することはできません。そのため、システムに機能を追加するためのプラグインのようなモジュールを作成する必要があります。問題は、ポートレットを使用して jsp にリダイレクトすることにより、元の画面を自分のものに変更したいことです。コア コードのコントローラーは次のようなものです。

@RequestMapping("/patientDashboard.form")
    protected String renderDashboard(@RequestParam(required = true, value = "patientId") Integer patientId, ModelMap map){

     ....
     return "patientDashboardForm";
}

私は Spring に詳しくありませんが、URL が /patientDashboard.form?patientId=xxx で終わると、関数はpatientDashboardForm.jsp を呼び出すことを知っています。今、私は自分のjspに戻りたいので、同じコードで新しいクラスを定義する必要がありますが、自分のjspに戻ります(コアコードを変更できないため、これを行うには)。しかし、同じマッピング /patientDashboard.form を定義すると、「ハンドラー XXX を URL パス /patientDashboard.form にマップできません: ハンドラー YYY が既にマップされています」というエラーが発生します。とにかく、この状況を克服する方法はありますか?

4

2 に答える 2

0

既存のを無効にする方法はありません@RequestMapping。各マッピングは一意である必要があります。あなたにできることは次のとおりです。リクエストパラメータを追加する代わりに、次のようなパスパラメータを追加します

@RequestMapping("/patientDashboard.form/{patientId}", method = RequestMethod.GET)
public String renderDashboard(@PathVariable("patientId") final long id, Model model) {
 /* your code here */ 
}

@RequestMappingこれにより、既存のものとは異なる新しいものが作成されます。

于 2012-07-10T11:19:33.723 に答える
0

@Controller既存のものを拡張する別のものを作成する必要があります。次に、カスタム マッピングを定義し (既存のものを再利用することはできません)、都合のよいときにスーパークラス メソッドを再実装して、ビューにリダイレクトし、そこでカスタム ロジックを定義できます。

例:

@Controller
@RequestMapping("/your_new_mapping")
public class YourController extends BaseController {

    @Override
    @RequestMapping("/patientDashboard.form")
    public void renderDashboard(@RequestParam(required = true, value = "patientId") Integer patientId, ModelMap map){
            // Call to default functionallity
            super.renderDashboard(patientId, map);
            ...
            // your custom code here
            return "yourCustomJSPHere";
    }
}
于 2012-07-10T10:54:10.973 に答える