1

在Struts 2應用程序中,我想運行所有項目操作之前的邏輯。該邏輯將產生一個字段錯誤或讓行動繼續。Struts 2如何在每個動作之前運行驗證

我試圖爲這種情況開發一個攔截器。

但這裏是我的問題:

在驗證我們稱之爲addFieldError(fieldName, object);設置字段錯誤,但我不知道我怎麼能在一個攔截器添加字段錯誤。


如果這是不可能的,請讓我知道如果我可以用它我所有的行動(我用@Validations,我正在尋找一種方式不給我驗證上的頂級副本之前運行的驗證我的所有動作!)

+0

驗證在任何操作之前運行* always *。有時你不需要這樣的驗證或驗證不在事務中執行,因此移動到更高層意味着一個*表示層。 –

回答

3

您可以通過在攔截器中將動作調用強制轉換爲ValidationAware來添加字段(和動作)錯誤。 顯然,你的行動具有實際實現ValidationAware接口,但它probaly做(例如,如果你的行動延伸ActionSupport那麼它也ValidationAware因爲ActionSupport工具ValidationAware):

public String intercept(ActionInvocation invocation) throws Exception { 
    Object action = invocation.getAction(); 
    if (action instanceof ValidationAware) { 
     ValidationAware validationAware = (ValidationAware) action; 
     validationAware.addFieldError("field", "field error"); 
     validationAware.addActionMessage("action message"); 
     validationAware.addActionError("action error"); 
    } 
    return invocation.invoke(); 
} 
1

您可以在行動呼籲addFieldError()只是澆鑄到ValidationAware接口:

public String intercept(ActionInvocation invocation) throws Exception { 
    ActionContext invocationContext = invocation.getInvocationContext(); 
    Object action = invocation.getAction(); 

    if (action instanceof ValidationAware) { 
     ValidationAware va = (ValidationAware) action; 
     va.addFieldError("field", "message"); 
    } 

    .... 
}