2

複数のモデルを持つSpring MVCフォームがあります。ColorShade

私は休止状態バリデーターを使用していますが、モデルが 1 つしかない場合、検証は完全に機能します。私の調査から、Spring MVC 形式で複数のモデルを作成する最善の方法は、両方のモデルをラップする新しいモデルを作成することであることがわかりました。だから私は作った:

モデル

public class ColorShade {

    private Color color;
    private Shade shade;

    //getter setters
}

public class Color {
  @NotEmpty
  private String name;
  //getter setters
}

public class Shade {
  @NotEmpty
  private String shadeName;
  //getter setters
}

コントローラ

@RequestMapping(method = RequestMethod.POST)
public String validateForm(
        @ModelAttribute("COLORSHADE") @Valid ColorShade colorShade,
        BindingResult result, Map model) {
    if (result.hasErrors()) {
        return "myForm";
    }

    return "success";
}

意見

<form:form method="post" commandName="COLORSHADE" cssClass="form-horizontal" >
    <spring:bind path="COLORSHADE.color.name">
        <div class="control-group ${status.error ? 'error' : ''}">
            <label class="control-label">Color Name</label>
            <div class="controls">
                <form:input path="${status.expression}"/>
            </div>
        </div>
    </spring:bind>
    <spring:bind path="COLORSHADE.shade.shadeName">
        <div class="control-group ${status.error ? 'error' : ''}">
            <label class="control-label">Shade Name</label>
            <div class="controls">
                <form:input path="${status.expression}"/>
            </div>
        </div>
    </spring:bind>
</form>

質問

  • 上記のセットアップは機能しますが、検証は現在機能していません。検証を機能させるにはどうすればよいですか?
  • モデルが 1 つだけで、ラップ アラウンド モデルを削除するとColorShade、検証は完全に正常に機能します。単一の形式の複数のモデルと検証の両方を適切に機能させるにはどうすればよいですか?
4

1 に答える 1