2010-08-04 114 views
0

我有一個CRUD操作和3個自定義驗證器的操作。Struts 2自定義驗證器問題

其中兩個驗證器正常工作,但另一個驗證器不正確。它正確處理驗證,並返回適當的錯誤,但如果沒有錯誤,工作流程不會完成,它永遠不會到達Action。就好像它卡在驗證器中一樣。日誌文件中沒有錯誤。如果我刪除驗證器,則達到該操作。

我不知道我在做什麼錯,我會很感激任何幫助。

+2

如果您可以發佈有問題的驗證程序,那會很有幫助。 – Pat 2010-08-04 19:58:03

回答

0
package com.timesheet.validator; 

import java.util.Map; 

import com.timesheet.action.TimeSheetAction; 


import com.timesheet.util.TimeSheetClient; 

import com.timesheet.util.TimeSheetHolder; 
import com.opensymphony.xwork2.ActionContext; 
import com.opensymphony.xwork2.validator.ValidationException; 
import com.opensymphony.xwork2.validator.validators.ValidatorSupport; 

public class TimeSheetSubmission extends ValidatorSupport{ 


@Override 
public void validate(Object arg0) throws ValidationException { 
    // TODO Auto-generated method stub 

    Map session = ActionContext.getContext().getSession(); 
    TimeSheetAction act = (TimeSheetAction)ActionContext.getContext().getActionInvocation().getAction(); 
    TimeSheetClient client = act.getClient(); 

    if(session.get("holder") != null){ 
    TimeSheetHolder holder = (TimeSheetHolder)session.get("holder"); 

     if(!(excessTime(holder) && lessTime(holder))){ 

     client.cleanUp(); 
    addActionError(arg0); 
    return; 
    }else{ 

    client.cleanUp(); 
    return; 
    } 

    } 
} 
public boolean lessTime(TimeSheetHolder holder){ 
    boolean done = true; 
    TimeSheetHolder.Day day = holder.dailyHours(); 
    switch(day){ 

    case Mon: setMessageKey("timeSheet.mon.less.hours"); 
     done = false; 
     break; 
    case Tue: done = false; 
     setMessageKey("timeSheet.tue.less.hours"); 
     break; 
    case Wed: done = false; 
     setMessageKey("timeSheet.wed.less.hours"); 
     break; 
    case Thu: done = false; 
     setMessageKey("timeSheet.thu.less.hours"); 
     break; 
    case Fri: done = false; 
     setMessageKey("timeSheet.fri.less.hours"); 
     break; 
    default: break; 
    } 
    return done; 
} 
public boolean excessTime(TimeSheetHolder holder){ 
    boolean done = true; 
    TimeSheetHolder.Day day = holder.moreTime(); 
    switch(day){ 

    case Mon: setMessageKey("timeSheet.mon.excess.hours"); 
     done = false; 
     break; 
    case Tue: done = false; 
     setMessageKey("timeSheet.tue.excess.hours"); 
     break; 
    case Wed: done = false; 
     setMessageKey("timeSheet.wed.excess.hours"); 
     break; 
    case Thu: done = false; 
     setMessageKey("timeSheet.thu.excess.hours"); 
     break; 
    case Fri: done = false; 
     setMessageKey("timeSheet.fri.excess.hours"); 
     break; 
    default: break; 
    } 
    return done; 
} 

} 
+0

即使我從validate方法中刪除了所有代碼,它也沒有到達Action。 – John 2010-08-09 20:45:02