我希望如果用户尝试使用我表中已存在的代码进行注册,那么它应该提供错误
此代码已被采用,请尝试使用不同的代码。
使用Struts2我想这样做。下面是我的动作类。
我所做的是:首先我发出了一个查询,用于使用结果集选择代码,并将所有结果存储在一个字符串变量temp_user
和validate()
方法中,我刚刚使用{{ 1}}方法,但它不起作用。
RegisterAction.java
equals(temp_user)
答案 0 :(得分:2)
感谢@Andrea Sir for Suggestion,它真的帮到了我。 :) 我在Validate()方法中编写了以下代码,并且我的代码已成功执行。非常感谢先生:)并且你发布的链接也清除了我应该如何在JSP和Action之间调用拦截器的概念。 :)下面是我的代码。
String temp_user = null;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/foryou", "root", "siddheshkk");
System.out.println("Step 1");
Statement st12 = con.createStatement();
ResultSet rs12 = st12.executeQuery("select code from bbinfo");
while (rs12.next()) {
temp_user = rs12.getString("code");
System.out.println("step2");
if (register.getCode().equals(temp_user)) {
addFieldError("register.code",
"This username is already taken .Try Different one !");
System.out.println("sid");
}
}
st12.close();
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:0)
您的问题是validate()
方法运行的execute()
方法在到达操作之前执行,因此在{{1}之前执行方法。
这意味着在temp_user
方法中读取时validate()
始终为空。
您需要了解Struts2的工作原理,尤其是Validation Interceptor的时间和方式。
解决方案:在
temp_user
方法中加载validate()
变量。
另请阅读the Interceptors are called between the JSP and the Action,讨论如何使代码更清晰,更加分离,因为动作中的所有JDBC内容都非常难看。