Проверка сервлета Java, если имя пользователя уже существует - PullRequest
0 голосов
/ 07 мая 2018

Это функция, которая проверяет, существует ли уже имя пользователя, а затем добавляет его, если отсутствует. Это в классе DepartmentBean.

Личный список пользователей;

public List<UserBean> getUsers() {
    return users;
}

public int flag;

public int getFlag() {
    return flag;
}


public void setFlag(int flag) {
    this.flag = flag;
}

public void addIfAbsent(UserBean userBean) {

            if (users.stream().anyMatch(x -> x.getUsername().equals(userBean.getUsername()))) {
        setFlag(1);// flag to indicate that there is user with the same name

            } else {

                setFlag(2);
           users.add(userBean);// add the user

            }
        }

В Сервлете я проверяю флаг следующим образом:

    DepartmentBean dp = new DepartmentBean();
    UserBean user = new UserBean();//UserBean is class which store name and password
    DepartmentBean departmentBean = read();
    String userName = request.getParameter("username");
    String password = request.getParameter("password");


    user.setPassowrd(password);
    user.setUsername(userName);
    departmentBean.addIfAbsent(user);

         if(dp.flag == 2)//if flag is 2, their's no user with the same name, so write it
         {

    RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
    write(departmentBean);//write to xml

         }

Если это не так, если фигурные скобки работают и запись сделана. Но если я использую это, если, это не так и приводит меня к белой странице вместо index.jsp.

Это функции записи и чтения в сервлете:

public static DepartmentBean read() throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(DepartmentBean.class, UserBean.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        return (DepartmentBean) unmarshaller.unmarshal(new StreamSource(new File("1.xml")));
    }

    public static void write(DepartmentBean department) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(DepartmentBean.class, UserBean.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(department, new File("1.xml"));
    }

1 Ответ

0 голосов
/ 07 мая 2018

Я вижу, что вы используете две переменные DepartmentBean: одну с именем "dp", а другую с именем "DepartmentBean". Вы используете последний, чтобы проверить, существует ли уже пользователь (так что «DepartmentBean.flag» будет изменен) и «dp», чтобы проверить значение флага (который ранее не изменялся в коде). Я бы предложил это:

DepartmentBean departmentBean = new DepartmentBean();
UserBean user = new UserBean();
String userName = request.getParameter("username");
String password = request.getParameter("password");


user.setPassowrd(password);
user.setUsername(userName);
departmentBean.addIfAbsent(user);

if(departmentBean.flag == 2)
{

    RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
    write(departmentBean);//write to xml

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...