shihappns Ответов: 1

Java-сервлеты: запрос.функции getattribute всегда вернуть значение null.


Функция addiFAbssent в классе DepartmentBean проверяет, существует ли элемент уже в контейнере:

Что я уже пробовал:

bool f;
public void addIfAbsent(UserBean userBean) {
            if (users.stream().anyMatch(x -> x.getUsername().equals(userBean.getUsername()))) {
                f = false;
            } else {
                f = true;
                users.add(userBean);
            }
        }
    }


В моем сервлете я пытаюсь отправить сообщение об успешной регистрации(если f=false, то у них нет имени пользователя с таким же именем):

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
                doAll(request, response);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
public static void doAll(HttpServletRequest request, HttpServletResponse response) throws Exception {
             DepartmentBean dp = new DepartmentBean();
             UserBean user = new UserBean();
             DepartmentBean departmentBean = read();
                String userName = request.getParameter("username");
                String password = request.getParameter("password");
                user.setPassowrd(password);
                user.setUsername(userName);
                departmentBean.addIfAbsent(user);
    if(dp.f = true)
    {
        String Message = "msg";
        /*Set attribute msg of Message*/
        request.setAttribute(Message, "msg");
        RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
         rd.forward(request, response);
         write(departmentBean);
    }
        }
        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"));
        }
    }

В моем html я добавил этот код jsp:
<%>
    String s = "msg";
    if (s == request.getAttribute("Message"))
    {  
        out.println("<p>Successful</p>");
    }
    else 
    {
        out.println("<p>Error reg</p>");
    }
    <%>


Когда я проверяю xml-файл, запись успешна, но в моем html-файле нет "успешного" абзаца. Он всегда возвращает null, абзац "Error reg".

0x01AA

1.) Что такое с departmentBean против. dp Последнее только декларируется, но не участвует?
2.) Также это выглядит подозрительно: if(dp.f = true)... Разве этого не должно быть if(dp.f == true)?

1 Ответов

Рейтинг:
0

Richard MacCutchan

        String Message = "msg";
        /*Set attribute msg of Message*/
        request.setAttribute(Message, "msg"); // so the attribute name is "msg"

...

    String s = "msg";
    if (s == request.getAttribute("Message")) // but the attribute name is not "Message"

Ваши имена атрибутов отличаются. Используйте имена, которые совпадают, и контент, который является более значимым.


0x01AA

Для меня это выглядит скорее так f отражает добавлено или нет

Richard MacCutchan

Вы правы, но смотрите мой обновленный ответ.

0x01AA

Я не знаю Java, поэтому не могу сказать, правильно это или нет. Для меня это выглядит так, как будто "сообщение" - это правильный атрибут, OP делает это:
request.setAttribute(сообщение, "msg");

Смотрите также мои комментарии к этому вопросу. Но как уже упоминалось я заблудился в этой области

Richard MacCutchan

Да, но в призыве к setAttribute он использует переменную Message в качестве параметра. Но ценность этого Message в этой точке находится строка "msg" Так что это то же самое, что писать request.setAttribute("msg", "msg");. Который является другим именем атрибута для "Message".

Кстати, большая часть Java очень похожа на C, C++ и C#; так что если вы знаете один из других языков, это не должно быть слишком сложно.