-1
Struts2をフレームワークとして使用してWebアプリケーションを構築しています。タイトルが示唆しているように、私はAJAXコールを使用してユーザ名の可用性をチェックしようとしています(同じ結果を達成するのが簡単なものがあれば、他の提案にもオープンしています)。ユーザー名可用性チェックStruts2とAJAXコールの使用
今私は2つの問題:
- リクエストは私のdoPost関数ではnullです。
- unameを文字列に設定しても、何も起こりません。
ここにコードがあります。
login.jspを
<s:form action="login.action" method="post" data-parsley-validate="">
<s:textfield name="user.username" key="Username" id="username" onchange="checkUsername()"/><span class="status"></span>
<s:submit method="doTheThing" align="center" onclick="hide()"/>
</s:form>
Javascriptを
function checkUsername(){
var uname = $(username).val();
if (uname.length > 3) {
$(".status").html("Checking availability...");
$.ajax({
type : "POST",
url : "usernameCheck.action",
data : "uname=" + uname,
success : function(msg) {
$(".status").ajaxComplete(
function(event, request, settings) {
$(".status").html(msg);
});
}
});
}
else {
$(".status").html("username should be at least 3 characters");
}
}
check.java
public class check extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionSupport connectionSupport = new ActionSupport();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
Connection connection = null;
String URL = "172.ExampleIP";
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(URL, "user","pass");
String uname = request.getParameter("user.username");
PreparedStatement ps = connection.prepareStatement("select username from users where username=?");
ps.setString(1, uname);
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
out.println("<b>" + uname + "</b> is avaliable");
} else {
out.println("<font color=red><b>" + uname + "</b> is already in use</font>");
}
out.println();
} catch (Exception ex) {
out.println("Error ->" + ex.getMessage());
} finally {
out.close();
}
}
public void doGet()
throws ServletException, IOException {
doPost(ServletActionContext.getRequest(), ServletActionContext.getResponse());
}
}
Struts.xml
<action name="usernameCheck" class="java.com.my.package.check" method="doGet"></action>
私は、これは重要な情報であるかどうかわからないんだけど、形はjQueryのモーダルボックスの上にあります。
[This](http://stackoverflow.com/questions/10214723/jquery-ajax-post-data)は、ajax POSTのデータをフォーマットする方法を助けるかもしれません。 –
あなたの問題は何ですか?私はあなたのコードにいくつかの問題があることに気が付きました...私は2つの** 1つの名前をつけます**あなたは 'struts2'を使っていますが、' ajax'呼び出しは 'struts2'の' action'ではなく 'servlet'によって処理されます* * 2。** 'ajax'の呼び出しでは' uname'として変数を送りますが、 'servlet'では' user.username'を受け取ることを期待しています。 – Plirkee
Frankenstein !! :Dサーブレットの代わりにアクションを作成します。通常は、ActionSupportをexecute()メソッドで拡張したクラスです。 –