0

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

<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

4

1 回答 1

0

我找到了解决方法。

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

所以

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

需要改为

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

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

于 2012-12-05T03:38:41.163 回答