Чтобы проверить, существует ли этот пользователь или нет в Struts2
Здесь я хочу, если пользователь пытается зарегистрироваться с кодом, который уже существует в моей таблице, то он должен предоставить ошибку, которая
Этот код уже занят, пожалуйста, попробуйте другой.
Используя Struts2 я хочу сделать это. Ниже мой класс действий.
Я сделал следующее: сначала я запустил запрос для выбора кода с использованием результирующего набора и сохранил все результаты в строковой переменной. temp_user
И в validate()
метод, который я только что сравнил, используя equals(temp_user)
метод, но это не работает.
RegisterAction.java
package org.entity;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.wsdl.Message;
import org.apache.struts2.interceptor.SessionAware;
import nl.captcha.Captcha;
import com.opensymphony.xwork2.ActionSupport;
public class RegistrationAction extends ActionSupport implements SessionAware {
BloodBank register;
private Map<String, Object> session;
private String temp_user;
public BloodBank getRegister() {
return register;
}
public void setRegister(BloodBank register) {
this.register = register;
}
public Map<String, Object> getSession() {
return session;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public String getTemp_user() {
return temp_user;
}
public void setTemp_user(String temp_user) {
this.temp_user = temp_user;
}
@Override
public String execute() throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/foryou", "root", "siddheshkk");
System.out.println("Driver Loaded");
Statement st12 = con.createStatement();
PreparedStatement st = con
.prepareStatement("insert into bbinfo(code,name,address,city,district,contactno,stdcode,password,aname,email) "
+ "values(?,?,?,?,?,?,?,?,?,?)");
st.setString(1, register.getCode());
st.setString(2, register.getBbname());
st.setString(3, register.getAddress());
st.setString(4, register.getCity());
st.setString(5, register.getDistrict());
st.setString(6, register.getNumber());
st.setString(7, register.getStd());
st.setString(8, register.getPassword());
st.setString(9, register.getAname());
st.setString(10, register.getEmail());
st.executeUpdate();
st.close();
PreparedStatement st1 = con
.prepareStatement("insert into stockinfo(name,city,address,contact,email,code,stdcode,apositive,anegative,bpositive,bnegative,abpositive,abnegative,opositive,onegative)"
+ "values(?,?,?,?,?,?,?,'0','0','0','0','0','0','0','0')");
st1.setString(1, register.getBbname());
st1.setString(2, register.getCity());
st1.setString(3, register.getAddress());
st1.setString(4, register.getNumber());
st1.setString(5, register.getEmail());
st1.setString(6, register.getCode());
st1.setString(7, register.getStd());
st1.executeUpdate();
st1.close();
System.out.println("done");
ResultSet rs12 = st12.executeQuery("select code from bbinfo");
while (rs12.next()) {
temp_user = rs12.getString("code");
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
@Override
public void validate() {
super.validate();
if (register.getCode().length() < 1 | register.getCode().equals("")) {
addFieldError("register.code", "Mandatory Field.");
}
if(register.getCode().equals(getTemp_user()))
{
addFieldError("register.code", "This Code is already taken. Please try different one.");
}
if (register.getBbname().equals("") | register.getBbname().length() < 1) {
addFieldError("register.bbname", "Invalid Name");
}
if (register.getAddress().equals("")) {
addFieldError("register.address", "Invalid Address");
}
if (register.getCity().equals("")) {
addFieldError("register.city", "Invalid City");
}
if (register.getDistrict().equals("")) {
addFieldError("register.district", "Invalid District");
}
if (register.getPassword().length() > 8
| register.getPassword().equals("")) {
addFieldError("register.password", "Please Enter a valid Password");
}
if (!(register.getConfirm().equals(register.getPassword()))) {
addFieldError("register.confirm", "Password doesnt match");
}
if (register.getConfirm().isEmpty()) {
addFieldError("register.confirm", "Please enter confirmed password");
}
if (register.getAname().equals("")) {
addFieldError("register.aname", "Please enter your name");
;
}
if (register.getEmail().equals("")) {
addFieldError("register.email", "Invalid Email Id");
} else {
String expression = "^[\\w\\-]([\\.\\w])+[\\w]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
CharSequence inputStr = register.getEmail();
Pattern pattern = Pattern.compile(expression,
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (!matcher.matches())
addFieldError("register.email", "Invalid email address");
}
Captcha captcha = (Captcha) session.get(Captcha.NAME);
if (!(captcha.isCorrect(register.getCaptchaAnswer()))) {
addFieldError("register.captchaAnswer", "incorrect captcha");
}
}
}
2 ответа
Ваша проблема в том, что validate()
метод, запускаемый перехватчиком проверки,
выполняется до достижения действия и, следовательно, до execute()
метод.
Это означает, что temp_user
всегда нулевой, когда читается в validate()
метод.
Вам нужно узнать, как работает Struts2, особенно когда и как вызываются перехватчики между JSP и действием.
Решение: загрузите
temp_user
переменная внутриvalidate()
метод.
Также прочитайте: Должен ли я получить запись базы данных в слое представления Struts2? для обсуждения того, как сделать ваш код чище и более разделенным, потому что все эти вещи JDBC в действии действительно ужасны.
Спасибо @Andrea Sir за предложение, и оно мне очень помогло.:) Я написал следующий код в методе 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();
}