当表单验证在其他表单元素(不是密码输入文本框本身)上失败时,我有一个非常奇怪的密码错误显示为标签。该视图的代码如下所示。
<s:if test="%{username == null}">
<form method="post" enctype="multipart/form-data"
action="manageUser_create.action">
</s:if>
<s:else>
<form method="post" enctype="multipart/form-data"
action="manageUser_update.action">
</s:else>
<div>
<s:textfield name="firstName" key="First Name" cssClass="text-input" />
<br class="clear" />
<s:textfield name="lastName" key="Last Name" cssClass="text-input" />
<br class="clear" />
<s:file name="practiceLogo" id="practiceLogo" key="Upload Logo" cssClass="text-input" />
<br class="clear" />
<s:if test="%{username == null}">
<s:textfield name="username" id="username" key="Username" cssClass="text-input" />
<br class="clear" />
</s:if>
<s:else>
<s:hidden name="username"></s:hidden>
</s:else>
<s:password name="password" key="Password" cssClass="text-input" />
<br class="clear" />
<s:textfield name="email" cssClass="text-input" key="Email Address" />
<br class="clear" />
<s:textfield name="replyToEmail" key="Reply To Email" cssClass="text-input" />
<br class="clear" />
<s:submit align="center" value="Save" id="submitButton" cssClass="btn btn-primary" />
</div>
</form>
该操作使用注释进行验证,如下所示 -
@Validations(requiredStrings = {
@RequiredStringValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "firstName", key = "opd.error.name.required"),
@RequiredStringValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "lastName", key = "opd.error.name.required"),
@RequiredStringValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "username", key = "opd.error.username.required"),
@RequiredStringValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "password", key = "opd.error.password.required"),
@RequiredStringValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "email", key = "opd.error.email.required"),
@RequiredStringValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "replyToEmail", key = "opd.error.email.required")
},
emails = {
@EmailValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "email", key = "opd.error.email.format"),
@EmailValidator(type = ValidatorType.FIELD, shortCircuit=true, fieldName = "replyToEmail", key = "opd.error.email.format")})
public String update() {
当我没有输入密码时,验证失败就像它应该的那样,然后我在密码标签和文本框上方看到正确的消息。这很好。
如果我输入密码但遗漏了其他内容,例如回复电子邮件,那么什么是行不通的。密码本身不显示密码标签,而是显示密码:“密码:”。例如,如果密码是abcd,则abcd将显示为标签。
修改 这似乎是一个严重的错误。如果密码的属性“密钥”更改为除密码或密码以外的任何内容,则它将显示为标签。 Struts 2版本:2.2.1
答案 0 :(得分:0)
我找到了解决方法。
在密码字段中使用属性“label”而不是“key”可以解决此问题。
所以
<s:password name="password" key="Password" cssClass="text-input" />
需要更改为
<s:password name="password" label="Password" cssClass="text-input" />
看起来很奇怪,因为所有其他字段都使用密钥。