0

Ajax 機能に組み込まれた jQuery 検証エンジンを使用して、姓フィールドから Struts アクション クラスにリクエストを送信します。
私のHTMLコードは次のとおりです。

<script>
    $(document).ready (function ()
    {           
        $("#subform").validationEngine('attach', {
            autoHidePrompt : true , 
            autoHideDelay : 5000                
        }); 
    });
</script>

<body>

<div class = "container">                           
    <form id = "subform" action = "next" method = "post">           <br><br><br>
        First Name: <input id = "txtfname" name = "txtfname" type = "text" class = "validate[required]" 
            placeholder = "enter emp name" />
        Last name: <input id = "txtlname" name = "txtlname" type = "text" placeholder = "enter emp lname" 
                class = "validate[required, ajax[ajaxStrutsCall]]" />       
        Age: <input id = "txtage" name = "txtage" type = "text" placeholder = "enter age"  />           
        <input id ="cmdsubmit" type = "submit" name = "cmdsubmit" value = "click here" />
    </form>
</div>

</body>

ajax[ajaxStrutsCall] は、struts 呼び出しの URL の jquery.validationEngine-en.js を参照します。
jquery.validationEngine-en.js は:

"ajaxStrutsCall": {
                "url": "ajaxVal/LnameVal",
                "alertTextOk": "Your last name seems ok",
                "alertText": "Bad Last name",
                "alertTextLoad": "Validating, please wait"
            },

URL は struts.xml ファイルにマップされています。

<package name = "ajaxAction" namespace = "/ajaxVal" extends = "json-default">
    <action name = "LnameVal" class = "validation.struts.AjaxStrutsAction" method = "execute">
        <result name = "success" type = "json" />
    </action>
</package>

最後に、私のStrutsアクションクラスは次のとおりです。

public class AjaxStrutsAction extends ActionSupport implements ServletResponseAware, ServletRequestAware {

private HttpServletRequest request;
private HttpServletResponse response;

@Override
public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
    this.response = response;
}

@Override
public String execute() throws Exception {

    Gson gson = new Gson ();
    PrintWriter out = null;
    String data = request.getParameter("txtlname");
    System.out.println ("in struts class, got data from ajax query, lname is: " + data);

    try {
        Object [] ret = new Object [3];
        ret[0] = "txtlname";
        ret[1] = true;

        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json");
        out = response.getWriter();
        out.write(gson.toJson(ret));

    }catch (Exception e) {
        System.out.println ("error " + e.getStackTrace() );
    }finally {
        out.flush();
        out.close();
    }

    return "success";
}

}

現在、struts アクション クラスからの応答は適切で、問題はありませんが、データがクラスに送信されていません。つまり、request.getParameter ("txtlname")null が返され、名前がクラスによって読み取られないか、要求によって送信されます。

4

1 に答える 1

0

OK、私はこれを理解しました。個々のフィールド検証の場合、jquery検証エンジンは入力フィールドの名前とfieldIdそれに格納された実際の値を含むデータを送信するようです。フィールドの名前であるfieldValue
場合txtlname、それは格納されますfieldId と fieldValue の値なので、変化します

String data = request.getParameter("txtlname");

String data = request.getParameter("fieldValue");  

問題を解決しました

于 2013-10-16T04:53:24.753 に答える