【发布时间】:2012-12-05 03:09:19
【问题描述】:
当表单验证在其他表单元素(不是密码输入文本框本身)上失败时,我有一个非常奇怪的密码显示为标签的错误。视图代码如下。
<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
【问题讨论】:
-
"key"属性指定...键,而不是标签。"key"是一种同时简写名称、值和标签的方法,如docs of any UI tag, e.g., textfield 中所述。 -
好的。我现在看到了这个问题。它从资源包中获取密钥。问题是它适用于其他控件而不是密码。我认为当输入位于 ValueStack 中的密码时会发生什么。密钥找不到资源包,然后获取该值(密码)并将其设置为标签。有点奇怪为什么其他 ui 组件不显示相同的行为。