標準セキュリティを使用している場合、サインアップ フォームのエラーはフォームに表示されません。何がうまくいかなかったのかについてのフィードバックはなく、空の画面だけです。
空のフォームの解決策は、この質問の最後に記載されています。
しかし、フォームに表示されるバインディング結果の検証エラーをどのように取得するかという問題が残っています。「Create New user」フォームのように。
gvNIX を追加した Spring 2.0.0.M1 を使用しています。
私の質問:それを機能させるための簡単な回避策はありますか?
テスト スクリプト:
// Create a new project
project setup --topLevelPackage com.springsource.pizzashop --projectName pizzashop
jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
entity jpa --class ~.domain.Pizza
field string --fieldName name --notNull --sizeMin 10
field number --fieldName price --notNull --type java.math.BigDecimal
// Adding web layers
web mvc setup
web mvc all --package ~.web
// Adding Spring security
typicalsecurity setup
// Adding JQuery, Datatables and Bootstrap
web mvc jquery setup
web mvc jquery all
web mvc datatables setup
web mvc bootstrap setup
web mvc bootstrap update
パスワード フィールドの必要な長さを変更します。
ファイル内 ...\src\main\java\com\springsource\pizzashop\domain\User.java
@NotNull
@Size(min = 8) // was (min = 1)
private String password;
ファイル ..\src\main\java\com\springsource\pizzashop\web\UserRegistrationForm.java で、上記と同じ変更を適用します。
@NotNull
@Size(min = 8) // was (min = 1)
private String password;
ファイル ...\src\main\java\com\springsource\pizzashop\web\SignUpController.java に 1 行のデバッグ情報を追加します。
@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String create(@Valid UserRegistrationForm userRegistration, BindingResult result, Model model, HttpServletRequest request) {
validator.validate(userRegistration, result);
System.out.println("Has binding errors: " + result.toString()); // added
if (result.hasErrors()) {
return createForm(model);
} else {
// Rest of the code
サインアップ フォームのパスワード フィールドに 8 文字ではなく 1 文字しか入力されていない場合、Recaptcha が間違っていると、デバッグ行に次のメッセージが表示されます。
Has binding errors: org.springframework.validation.BeanPropertyBindingResult: 3 errors
Field error in object 'userRegistrationForm' on field 'repeatPassword': rejected value [a]; codes [Size.userRegistrationForm.repeatPassword,Size.repeatPassword,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userRegistrationForm.repeatPassword,repeatPassword]; arguments []; default message [repeatPassword],2147483647,8]; default message [size must be between 8 and 2147483647]
Field error in object 'userRegistrationForm' on field 'password': rejected value [a]; codes [Size.userRegistrationForm.password,Size.password,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userRegistrationForm.password,password]; arguments []; default message [password],2147483647,8]; default message [size must be between 8 and 2147483647]
Error in object 'userRegistrationForm': codes [recaptcha.mismatch.userRegistrationForm,recaptcha.mismatch]; arguments []; default message [null]
これは正しいですが、ユーザーが画面に表示するフォームにフィードバックは表示されません! そのため、ユーザーにとって、何が問題なのか、フォームが保存されずに戻ってくる理由が明確ではありません。ユーザーに表示されるのは、情報のない空のサインアップ フォームだけです。
私が期待するのは、「Create New User」でこのパスワード フィールドにも 1 文字が入力されている場合に表示されるようなメッセージです。メッセージが赤で表示されるよりも: サイズは 8 から 2147483647 の間でなければなりません
空の画面の解決策: 空の画面 の解決策は、ユーザーが [保存] を押したときに入力した情報でフォームに戻ることです。これは、Spring Roo / gvNIX の他の create および update メソッドと同じ動作です。
@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String create(@Valid UserRegistrationForm userRegistration, BindingResult result, Model model, HttpServletRequest request) {
validator.validate(userRegistration, result);
if (result.hasErrors()) {
model.addAttribute("User", userRegistration); // Added: the original info
return "signup/index";
//return createForm(model); // original, commented out.
} else {
これにより、空の画面の問題が解決され、ユーザーには提供された情報が表示されます。ただし、バインディング結果の赤色のフィードバックはまだわかりません。
どうすればそれを見えるようにできますか?