Чтобы проверить, существует ли этот пользователь или нет в 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();
        }
Другие вопросы по тегам