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 がラベルとして表示されます。

編集 これは深刻なバグのようです。password の属性「key」を Password または password 以外に変更すると、ラベルとして表示されます。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 に答える