2012-10-24 29 views
4

我有一個表單,我需要在提交時進行驗證。我已將public void validate()添加到我的動作課程中。但是,即使在尚未提交表單的初始頁面加載中,也會顯示錯誤。Struts 2在首頁加載時跳過驗證

我已閱讀thisthis,但沒有解決我的問題。是否真的很難實現這樣簡單的事情,比如在第一次加載時跳過驗證? :(

我使用手動驗證動作類中。

struts.xml的

<action name="login" class="community.action.LoginAction"> 
    <result name="success" type="redirect">/forums/list</result> 
    <result name="login">/WEB-INF/login.jsp</result> 
    <result name="input">/WEB-INF/login.jsp</result> 
</action> 

LoginAction.java

public void validate() { 
    //validation rule 
    addActionError("Error message"); 
} 

public String execute() { 
    if (//username and password correct) { 
     return SUCCESS; //redirect to forums page 
    } else { 
     return LOGIN; 
    } 
} 

目前的誤差,即使形式顯示未提交

我試圖使用​​上的@SkipValidation註釋,但這樣可以防止出現錯誤,即使在提交表單之後也是如此。

回答

6

您可以在LoginAction類多了一個方法來與@SkipValidation

LoginAction.java

 public String execute() 
     {  
      if (//username and password correct) { 
       return SUCCESS; //redirect to forums page 
      } else { 
      return LOGIN; 
       }  
     } 

    public void validate() 
    { 
      //validation rule 
       addActionError("Error message"); 
    } 


    @SkipValidation 
    public String loginForm() 
    { 
      return INPUT; 
    } 

返回的login.jsp的輸入現在只有將出現驗證在執行方法上。第一請求應該來登錄表單method.To使此,稍微修改在配置

struts.xml中

<action name="login_*" class="community.action.LoginAction" method="{1}"> 
    <result name="success" type="redirect">/forums/list</result> 
    <result name="login">/WEB-INF/login.jsp</result> 
    <result name="input">/WEB-INF/login.jsp</result> </action> 

這裏方法=「{1}」中的動作元素的條目將被使用以檢查請求的方法,如果請求中沒有指定任何內容,則將調用execute()方法,否則將調用提及的方法。注意操作名稱已更改爲login_ *

要提及方法名稱在JSP中:


------- 
    <s:submit name="SubmitButton" value="Click To Login" action="login_loginForm"/> 


在上述動作提交UI元件已經得到提及login_loginForm。這裏login_引用動作名稱,loginForm引用要調用的方法。希望這會有所幫助

1

這意味着,我已經在首次加載頁面時調用了該操作。解決此問題的最簡單方法是將您的操作從login重命名爲loginAction或其他。

+0

我同意,但看到我的評論@Aleksandr M答案。 – Eleeist

2

您需要使用不同的操作名稱。一個用於查看錶單和其他提交。

+0

我也是這樣的,但是用戶仍然可以輸入地址進行「處理」,並在未提交表單時訪問顯示錯誤的頁面。我同意 - 這是一種「解決方法」,但並不理想。任何解決方案? – Eleeist

+0

「解決」是什麼意思?通過「submit」url訪問帶有表單的頁面的解決方案取決於你如何處理它? –