2012-12-05 69 views
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

+0

''鍵''屬性指定...鍵,而不是標籤。 ''key''是一種簡化名稱,值和標籤的方法,如[任何UI標籤的文檔,例如textfield]中所述(http://struts.apache.org/2.x /docs/textfield.html#textfield-Paramaters)。 –

+0

好的。我現在看到了這個問題。它從資源包中獲取密鑰。問題是,它適用於其他控件而不是密碼。我認爲會發生的情況是在ValueStack中輸入密碼時。密鑰找不到資源包,然後獲取(密碼的)值並將其設置爲標籤。有點奇怪爲什麼其他用戶組件不顯示相同的行爲。 – Mukus

回答

0

我找到了解決方法。

在密碼字段中使用屬性「標籤」而不是「密鑰」修復了此問題。

所以

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

需要改變,以

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

似乎很奇怪,但因爲所有其他領域與關鍵合作。