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] 引用 jquery.validationEngine-en.js 作为 struts 调用的 url。
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

好的,我想通了,似乎对于单个字段验证,jquery 验证引擎发送的数据包含输入字段的名称fieldId和它存储的实际值,fieldValue
所以如果txtlname是字段的名称,它会被存储在 fieldId 和 fieldValue 中的值,所以改变

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

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

解决了问题

于 2013-10-16T04:53:24.753 回答