验证失败密码的Struts 2显示为标签

时间:2012-12-05 03:09:20

标签: java struts2

当表单验证在其他表单元素(不是密码输入文本框本身)上失败时,我有一个非常奇怪的密码错误显示为标签。该视图的代码如下所示。

<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

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

在密码字段中使用属性“label”而不是“key”可以解决此问题。

所以

<s:password name="password"  key="Password" cssClass="text-input" />

需要更改为

<s:password name="password" label="Password" cssClass="text-input" />

看起来很奇怪,因为所有其他字段都使用密钥。