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 が返され、名前がクラスによって読み取られないか、要求によって送信されます。