Невозможно повторно получить и обновить данные в том же классе действий struts

#struts

#struts

Вопрос:

Я новичок в struts и в настоящее время работаю над проектом. На одной странице я хочу заполнить некоторые данные из базы данных, и в моем есть кнопка отправки, с которой будут отправляться данные.

Мой класс действий struts:

 public class BookreturnAction extends org.apache.struts.actions.DispatchAction {

    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        BookreturnForm bookreturnForm = (BookreturnForm) form;
        System.out.println("in the from"   bookreturnForm.toString());
        HttpSession session = request.getSession(true);
        List bookreturncollectionlist = new ArrayList();
        List<StudentSessionObjectStore> list = new ArrayList<StudentSessionObjectStore>();

        int studentid = 0;
        if (session.getAttribute("getsessionObject") != null) {

            list = (ArrayList) session.getAttribute("getsessionObject");
            for (StudentSessionObjectStore store : list) {
                studentid = store.getId();
                System.out.println("the student id"   studentid);
            }

            bookreturncollectionlist = BookreturnDAO.getBookReturn(studentid);//use to papulate data
            request.setAttribute("collectionreturn", bookreturncollectionlist);
        }
        return mapping.findForward(Constants.ACTION_FORWARD_SUCCESS);
    }

    public ActionForward inserted(ActionMapping mapping, ActionForm form,
                                  HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        BookreturnForm bookreturnForm = (BookreturnForm) form;

        boolean isInserted = BookreturnDAO.bookReturn(bookreturnForm);//use to insert data
        if (isInserted) {
            request.setAttribute("msg", "Your Request Succesfully Submitted");
        } else {
            request.setAttribute("msg", "Try again");
        }

        return mapping.findForward(Constants.ACTION_FORWARD_SUCCESS);
    }
}
  

Конфигурация Struts:

 <action name="BookreturnForm" parameter="inserted" 
        path="/bookreturn" scope="request" validate="false"
        type="com.rec.bookbank.action.BookreturnAction">
    <forward name="success" path="/jsp/Student/bookReturn.jsp"/>
</action>
  

ссылка на мою страницу jsp

 <html:link page="/bookreturn.do?parameter=inserted"> Books Return</html:link> 
  

Ответ №1:

Задавая вопросы, пожалуйста, опишите, что на самом деле происходит, и какие шаги предпринимаются, чтобы добраться до битов, которые не работают. Есть ли исключение? Вызывается ли неправильный метод? Не вызывается ли какой-либо метод? В форме нет данных? И так далее.

Похоже, вы нажимаете на ссылку и ожидаете, что произойдет что-то другое, кроме перехода на новую страницу. Все, что вы показываете, это щелчок по ссылке, а не отправка формы. Все, что касается формы действия, не будет делать то, что вы думаете. Чтобы получить данные формы, вы должны отправить форму.

В самом коде

Что StudentSessionObjectStore делает цикл? Если в списке есть только один элемент, это нормально, но вводит в заблуждение: если есть один ученик, сохраните его в сеансе как одного ученика, а не как список.

Если их больше одного, вы всегда будете возвращать возврат книги для последнего ученика (?) в списке. Это не обязательно неправильно, но кажется, что это должно быть неправильно.

Рассмотрите возможность использования имен методов и переменных для описания функциональности, а не комментариев. Например:

 boolean isInserted = 
    BookreturnDAO.bookReturn(bookreturnForm); // use to insert data
  

Это содержит пару подозрительных имен, на которые указывает необходимость комментария. Вместо этого сделайте это:

 boolean wasReturned = BookReturnDao.returnBook(bookReturnForm);
  

Методы обычно должны называться как глагол, указывающий, что метод делает на концептуальном уровне. Действию не нужно знать детали реализации; не имеет значения, обрабатывается ли процесс возврата книги с помощью insert , и он может измениться (установка флага, удаление записи и т. Д.) Отдельные системные компоненты должны знать как можно меньше о деталях реализации.

Аналогично, не передавайте классы, специфичные для Struts, например an ActionForm , на уровень данных. Это привязывает базовый код к структуре Struts и усложняет тестирование без уважительной причины. Вместо этого используйте что-то специфичное для домена, а не для конкретной платформы, например, идентификатор книги.