【问题标题】:jquery validation engine ajax call to struts2 action not sending datajquery验证引擎ajax调用struts2动作不发送数据
【发布时间】:2013-09-18 11:12:22
【问题描述】:

使用内置在 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 action 类的响应是正确的,那里没有问题,但是数据没有发送到类,即request.getParameter ("txtlname") 返回 null,类不读取名称/发送者请求。

【问题讨论】:

  • 是的,我问了同样的问题,但我问了几个关于这个问题的问题,我没有得到这个问题的答案
  • 正如我在之前的评论中已经提到的,我问了这个问题,但我没有得到这个问题的答案,所以,在我等了两个星期后,我把这个问题删掉了,问了再次。
  • 另外,如果你仔细阅读这两个问题,你会发现这个问题根本与 s:url 标签无关,我正在执行 struts 操作,但是数据没有被发送所以 s:url (另一个问题中的两个答案都使用)不是答案,因为无论如何我都可以调用 struts 动作,所以不赞成,下次做你的研究

标签: jquery ajax jsp struts2 jquery-validation-engine


【解决方案1】:

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

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

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

解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多