【问题标题】:Struts 2 on validation fail password is displayed as labelStruts 2 验证失败密码显示为标签
【发布时间】: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 组件不显示相同的行为。

标签: java struts2


【解决方案1】:

我找到了解决方法。

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

所以

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

需要改成

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2020-09-21
    • 2015-04-19
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多