私は計算を実行するためにクライアントがデータを入力する必要がある電卓をやっています。AJAXポストでフォームを検証する
私はクライアント側からの情報を検証していますが、私はサーバー側からもやりたいと思います。 Thisは私が次のような例ですが、私はそれを私の問題に適合させる方法を知らない。
@RestController
@RequestMapping(value = "/api")
public class CalculationController {
...
@RequestMapping(value = "calculate", method = RequestMethod.POST)
public double[] calculate(@ModelAttribute("calcForm") @Validated CalculationForm form,
BindingResult result,
final RedirectAttributes redirectAttributes) {
double[] ans = new double[4];
// Calculate and fill ans
return ans;
}
私のAJAX POST:私のバリデータと
function calculate() {
if ($('#zone').val() === '' || $('#roofArea').val() === '' || $('#roofType').val() === '') {
alert("Missing data");
} else {
var dataIn = $("#myForm").serialize();
$.ajax({
type: "POST",
url: "api/calculate",
data: dataIn,
dataType: "json",
success: function (data) {
// Update labels in page
},
error: function (e) {
alert("Error: " + e);
},
done: function (msg) {
alert("Done: " + msg);
},
async: false
});
return false;
};
:
@Component
public class BasicValidator implements Validator {
private Pattern pattern;
private Matcher matcher;
private static final String AREA_PATTERN = "^\\d+(\\.\\d{1,2})?$";
@Override
public boolean supports(Class<?> clazz) {
return CalculationForm.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
CalculationForm form = (CalculationForm) target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "zone", "You must select a city or area of the map.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "roofArea", "You must enter the roof area.");
pattern = Pattern.compile(AREA_PATTERN);
matcher = pattern.matcher(String.valueOf(form.getRoofArea()));
if (!matcher.matches())
errors.rejectValue("roofArea", "You must enter a valid number.");
}
}
私は、フォームが完了したときに、いくつかの特定のラベルの値のみが更新されている必要があるので、私はAJAXを使用しています、私はページをリロードできません。
問題がある場合は、すべてが正しい場合、/api/calculate
は、私がページにデータを入れるのに使う倍精度の配列を返します。しかし、エラーが発生した場合(必須フィールドに記入されていない場合)は、対応するメッセージを表示するためにエラーが発生した場所を教えてください。
これは素晴らしい機能です。ありがとう! – nikolat328