0
當表單驗證在其他表單元素(而不是密碼輸入文本框本身)上失敗時,我有一個非常奇怪的密碼錯誤顯示爲標籤。該視圖的代碼如下。驗證失敗密碼的Struts 2顯示爲標籤
<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''是一種簡化名稱,值和標籤的方法,如[任何UI標籤的文檔,例如textfield]中所述(http://struts.apache.org/2.x /docs/textfield.html#textfield-Paramaters)。 –
好的。我現在看到了這個問題。它從資源包中獲取密鑰。問題是,它適用於其他控件而不是密碼。我認爲會發生的情況是在ValueStack中輸入密碼時。密鑰找不到資源包,然後獲取(密碼的)值並將其設置爲標籤。有點奇怪爲什麼其他用戶組件不顯示相同的行爲。 – Mukus