使用典型安全性时,注册表单中的错误不会显示在表单中。没有关于出了什么问题的反馈,只有空屏幕。
我在这个问题的底部提供了空表格的解决方案。
然而,问题仍然是如何在表单中显示绑定结果验证错误。比如“创建新用户”表单。
我正在使用Spring 2.0.0.M1并添加了gvNIX!
我已经创建了issue at 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;
在文件中添加1行调试信息... \ src \ main \ java \ com \ springsource \ pizzashop \ web \ SignUpController.java
@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时,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]
这是正确的,但是用户在屏幕上看到的表单中没有显示任何反馈! 所以对于用户来说,不清楚出了什么问题以及为什么表单不能保存,而是回来了。 所有用户看到的都是一个空的注册表单,没有任何信息。
我期望的是一条消息,例如在“创建新用户”中显示的消息,此密码字段也填充了一个字母。比红色显示消息:大小必须介于8和2147483647之间
空屏解决方案: 空屏幕的解决方案是返回表单,其中包含用户在按下“保存”时提供的信息。这与Spring Roo / gvNIX的其他创建和更新方法中的行为相同。
@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 {
这解决了空屏幕的问题,用户看到他/她提供的信息。 但是,我仍然没有看到绑定结果的红色反馈。
如何让它可见?
答案 0 :(得分:2)
在gvNIX 2.0.0.M1上发现的错误将在未来版本的gvNIX项目上修复。
要显示这些错误消息,您必须对项目进行以下更改:
在文件〜/ webapp / WEB-INF / tags / jquery / form / create.tagx (第~30行)中,您必须编辑 form 元素的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
中考虑这些问题
希望这会有所帮助。问候。