3

XMLフォームの検証とvalidate()メソッドを使用したフォームの検証を行っています。XML検証では、必要なフィールドに入力されているかどうか、適切な長さのフィールドであるかどうかなどを確認します。validateメソッドは、入力された値がデータベースに存在するかどうかをデータベース検索します。存在する場合は、フィールドエラーが追加されます。

今私の問題。フォームを送信して入力しなかっrequiredstrings た場合、ページにエラーが追加されますが、有効な値を入力しても同じエラーが表示されます(同時に、validateメソッドは呼び出されません)。

これが私のフォームです。

<!DOCTYPE HTML>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
<head>

<sj:head/>  
</head>
<body>
    <h3>Register for a prize by completing this form.</h3>
    <div id="divErrors">
    </div>

    <s:form action="register" id ="result">
            <label>UserName</label>
            <s:textfield name="userBean.username" />
            <s:fielderror/>
        <sj:submit 
                    targets="result" 
                    value="AJAX Submit" 
                    indicator="indicator"
                    button="true"
                    />

    </s:form>
</body>
</html>

Register-validation.xml

<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <field name="userBean.username">
        <field-validator type="requiredstring">
            <message>User name is required.</message>
        </field-validator>
    </field>
</validators>

そして私validateRegisterActionクラスから。

public void validate(){

        if(userBean != null && userBean.getUsername().equals("foo")){
            this.addFieldError("userBean.username", "That Username already exist");

        }

    }

私がしているシナリオ。

必要な文字列を入力せずにフォームを送信し、有効な値を入力します。フォームを送信した後も同じエラーが発生します。

4

2 に答える 2

1

input実際の問題は、Struts2の検証フレームワークは、検証が失敗した場合にデフォルトで結果を返すことです。内部のフォームであるJSPページの場合、inputajax呼び出しを行うと、ページ全体が置き換えられます。

2回目に有効な呼び出しを行ったので、検証後、executeメソッドは結果を返す必要があります。そして、この結果は、ターゲットのページ"result"、つまりフォーム要素で置き換えられたJSPフラグメントである必要があります。ただし、div"divErrors"はコードに置き換えられません。最初のリクエストでエラーが発生した場合は、そこに表示されます。

わかりました。ajaxと検証を理解するのに十分な価値があると思います。そして、予期しない結果を返す問題を解決する方法を理解しました。

于 2013-02-23T12:38:17.833 に答える
-1

多くのことが起こっている可能性があります。たとえば、「userbean」は初期化されていない可能性があります。

また、2つの検証を使用しています。1つはXMLで、Validatorインターセプターを構成した場合に機能するはずです(http://struts.apache.org/2.2.3/docs/interceptors.htmlを参照)。 () 方法。

  • userbeanのゲッターとセッターがあるかどうかを確認します
  • ここでuserbeanのコンテンツを検査するためのvalidate()メソッドのブレークポイント
于 2012-12-20T12:16:50.193 に答える