2010-12-29 19 views
0

私は、従来のプロジェクトをSpringに変換しようとしています(できるだけ少し調整しようとしています)。モデル属性オブジェクト。私はこの問題については全く間違っているかもしれませんが、パラメータを特定のモデル属性セッターに変換するには、モデル属性を作成し、手動で正しいセッターを呼び出すメソッドを使用してrequestパラメータを渡します。Spring @ModelAttributeとリクエストパラメータバインディングの名前を変換する

@ModelAttribute("form") 
public MyForm createMyForm(@RequestParameter("legacy-param") legacy) { 
    MyForm myForm = new MyForm(); 
    myForm.setNewParam(legacy); 
    return myForm; 
} 

リクエストパラメータの名前を変更したいとは思っていませんが、JavaScriptやJSPはその名前に依存していますが、このようなやり方はありますか?あるいは、要求パラメータをモデル属性にマップ/変換する別の方法がありますか?

public class MyForm { 
    @ParameterName("legacy-param") 
    private String newParam; 

    public void setNewParam(String value) { ... } 

    public String getNewParam() { ... } 
} 

@Controller 
public class MyController { 

    @RequestMapping("https://stackoverflow.com/a/url") 
    public String myMethod(@ModelAttribute("form") MyForm myForm, BindingResult result) { ... } 
} 
+0

であなたのJSPで@ModelAttributeを使用すると、どこから来@parameternameん:

私はMVC 春3での例に沿って私のブログにここでの説明を置きますか? – OrangeDog

答えて

2

あなたがモデル属性メソッドを書いた方法は確かに奇妙です。実際に何をしようとしているのかは完全にはっきりしていません。多くのパラメータがあるので、あなたはModelMapでMyFormのインスタンスが非常に多くなることになります。

@ModelAttribute("legacyParamNotCamel") 
public MyForm createMyForm(@RequestParameter("legacy-param-not-camel") String legacy) { 
    return legacy; 
} 

この場合、JSPでは式言語で直接参照することができます。フォームのバッキングオブジェクト上にそれらを配置する場合、例えば、

<c:out value="${legacyParamNotCamel}"/>

、あなたはそれぞれの方法でそれの新しいコピーを作成し、オブジェクトを作成し、単一の方法でそれをすべて行う必要はありません。 (自分のフォームを仮定すると、それに関連付けられた単一のパラメータよりも多くを持っています。)

- それはあなたが本当にかかわらず、何をしようとしてのように思える は、ウェブデータバインダーが取得する前にリクエストのパラメータ名を変換でありますそれで、あなたは奇妙な名前のパラメータをJava Beanにバインドできますか?そのためには、バインディングプロセスが始まる前に名前を変換するインターセプタを使用するか、プロパティ名変換マップよりもデータバインダの独自のサブクラスを作成する必要があります。

+0

最後に、パラメータ名を変換しようとしています。申し訳ありませんが、これは混乱している場合、それは私が思い付くことができる最も簡単な方法でしたコードの多くを変更していない... – rcl

関連する問題