2

標準セキュリティを使用している場合、サインアップ フォームのエラーはフォームに表示されません。何がうまくいかなかったのかについてのフィードバックはなく、空の画面だけです。

空のフォームの解決策は、この質問の最後に記載されています。

しかし、フォームに表示されるバインディング結果の検証エラーをどのように取得するかという問題が残っています。「Create New user」フォームのように。

gvNIX を追加した Spring 2.0.0.M1 を使用しています。

すでにgithub で問題を作成しました

私の質問:それを機能させるための簡単な回避策はありますか?

テスト スクリプト:

// 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 {

これにより、空の画面の問題が解決され、ユーザーには提供された情報が表示されます。ただし、バインディング結果の赤色のフィードバックはまだわかりません。

どうすればそれを見えるようにできますか?

4

1 に答える 1

2

これは gvNIX 2.0.0.M1 で見つかったエラーで、gvNIX プロジェクトの将来のバージョンで修正される予定です。

これらのエラー メッセージを表示するには、プロジェクトで次の変更を行う必要があります。

ファイル ~/webapp/WEB-INF/tags/jquery/form/ create.tagx (行 ~30) で、フォーム要素の cssClass プロパティを次のように編集する必要があります。

<form:form cssClass="form-horizontal validate" ... >

赤のスタイルをエラー スパンに追加し、ファイル ~/webapp/styles/ standard.cssに次のコードを追加します。

.errors {
    color: #b94a48;
    display: block;
}

このオプションをパスワード入力に適用するには、ファイル ~/WEB-INF/tags/jquery/form/fields/ input.tagxを編集して、このすべてのオプションをパスワード入力に追加する必要があります。次のように ~112 行目にすべてを書き込んでください:

          <form:password class="form-control input-sm" id="_${sec_field}_id" path="${sec_field}" disabled="${disabled}" size="${size}"
          data-required="${required}" data-invalid="${field_invalid}" data-missing="${sec_field_required}"
          data-regex="${validationRegex}" data-minlength="${min}" data-maxlength="${max}"
          data-mindecimal="${decimalMin}" data-maxdecimal="${decimalMax}" value="${value}"/>

試してみて、うまくいったかどうか教えてください。

gvNIX の将来のバージョンでこの問題を考慮します。

お役に立てれば。よろしく。

于 2016-01-07T11:19:04.567 に答える