2012-07-04 235 views
0

我想驗證一個使用Struts2驗證器工具的表單,但它似乎沒有工作,因爲顯然xml驗證器是從不確認的。Struts2驗證不起作用

這裏是我的代碼:

的struts.xml:

<interceptors> 
    <interceptor name="login_interceptor" class="org.apache.struts.gesprod.produccion.BLLogin"> 
    </interceptor> 
    <interceptor-stack name="login_stack"> 
     <interceptor-ref name="login_interceptor" /> 
     <interceptor-ref name="defaultStack" /> 
    </interceptor-stack> 
</interceptors> 

<default-interceptor-ref name="login_stack"></default-interceptor-ref> 

<global-results> 
    <result name="input">/errores/error_input.jsp</result> 
    <result name="error_sql">/errores/error_sql.jsp</result> 
    <result name="no_logged">/login.jsp</result> 
</global-results> 
... 
<action name="login" class="org.apache.struts.gesprod.produccion.BLUsuario" method="loginUsuario"> 
    <result name="success" type="redirect">/welcome.jsp</result> 
    <result name="incorrecto_login">/login.jsp</result> 
    <result name="input">/login.jsp</result> 
</action> 

的login.jsp:

<div id="login"> 
    <s:fielderror /> 
    <s:form id="login_form" action="login" validate="true"> 
     <s:hidden name="intento_log" value="true" /> 
     <s:textfield name="usuario.username_usuario" label="Usuario"/> 
     <s:password name="usuario.password_usuario" label="Password"/> 
     <s:submit value="Ingresar"/> 
    </s:form> 
</div> 

和XML驗證器,放置在同一個包中的Action類。

BLUsuario登錄-validation.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE validators PUBLIC 
    "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 
<validators> 
    <field name="usuario.username_usuario"> 
     <field-validator type="requiredstring"> 
      <message>Show error!</message> 
     </field-validator> 
    </field> 
</validators> 

有人可以幫助和通知,如果有什麼錯我的代碼?

+0

那麼,我注意到你有「輸入」結果映射全球。這可能是你問題的一部分。當驗證執行並失敗時,它將返回輸入結果。因此,如果您想在login.jsp中顯示字段錯誤,那麼您需要將輸入結果映射到該JSP以進行登錄操作。 – rees

+0

@rees謝謝你,我做了你的建議,並且被授予,它應該保持這種狀態。但它仍然不會執行驗證,就好像即使字段錯誤也不會返回「輸入」結果。 –

回答

0

我認爲問題是在xml驗證器的名稱。您必須使用login-validation.xml重命名驗證器。你可以把你的XML驗證文件的名稱是:

驗證規則可以規定:

每Action類:在一個文件名爲ActionName-validation.xml中

每動作別名:在一個名爲ActionName-alias-validation.xml的文件中

Action類實現的繼承層次和接口: XWork的搜索行動了的繼承樹找到默認驗證了行動的父類和接口實現

你可以看到更多在這裏: http://struts.apache.org/2.0.12/docs/validation.html#Validation-DefiningValidationRules

PD:你說的「了」即使字段錯誤,輸入「結果永遠不會返回」。如果有任何字段錯誤(除非您指定其他內容),則會返回輸入結果。

+0

我的意思是輸入結果沒有被返回,如果字段在我的自定義驗證中指定的內容錯誤。例如,如果我把一個字符串放在int中,當然結果是'Input'。 –

+0

非常感謝您的幫助,但那也沒有奏效。有沒有一種方法可以調試驗證攔截器? –

+0

我不知道。你可以用你現在擁有的東西編輯你的問題嗎?你使用簡單的主題?如果你把''標籤放在jsp中,是否會出現任何錯誤?你有沒有宣佈任何攔截器? – Pigueiras