4

私のSpring Webアプリケーションでは:

    @RequestMapping(value = NEW)
public String addProduct(@RequestParam String name, @RequestParam(required = false) String description,
                         @RequestParam String price, @RequestParam String company, ModelMap model,
                         @RequestParam(required = false) String volume, @RequestParam(required = false) String weight) {
    try {
        productManagementService.addNewProduct(name, description, company, price, volume, weight);
        model.addAttribute("confirm", PRODUCT_ADDED);
        return FORM_PAGE;
    } catch (NumberFormatException e) {
        logger.log(Level.SEVERE, INVALID_VALUE);
        model.addAttribute("error", INVALID_VALUE);
        return FORM_PAGE;
    } catch (InvalidUserInputException e) {
        logger.log(Level.SEVERE, e.getMessage());
        model.addAttribute("error", e.getMessage());
        return FORM_PAGE;
    }
}

引数の総数を減らす/バインドする可能な方法は何ですか。

4

2 に答える 2

5

フォームクラスを作成する

class MyForm{
String name;
String price;
String description;
...
 // Getters and setters included
}

そして好きです

@RequestMapping(value = NEW)
public String addProduct(@ModelAttribute MyForm myForm)

要求パラメーターのインスタンス化MyFormとそのプロパティへのバインド、および ModelMap への追加は、舞台裏でスプリングによって行われます。

出典:春のドキュメント

メソッド引数の @ModelAttribute は、引数をモデルから取得する必要があることを示します。モデルに存在しない場合は、引数を最初にインスタンス化してからモデルに追加する必要があります。モデルに存在する場合、引数のフィールドは、一致する名前を持つすべてのリクエスト パラメータから入力する必要があります。これは、Spring MVC ではデータ バインディングと呼ばれ、各フォーム フィールドを個別に解析する必要がなくなる非常に便利なメカニズムです。

于 2013-08-07T18:46:51.850 に答える
3

を作成しclass、そのクラスのすべての属性をカプセル化し、そのクラス オブジェクトを として受け入れます@ModelAttribute。何かのようなもの:

public class MyData {

    private String name;

    private String description;

    private String price;

    private String company;

    private String volume;

    private String weight;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getVolume() {
        return volume;
    }

    public void setVolume(String volume) {
        this.volume = volume;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

}

次に、addProduct メソッドを次のように変更します。

public String addProduct(@ModelAttribute MyData myData, ModelMap model) 
于 2013-08-07T18:44:17.160 に答える