#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 и усложняет тестирование без уважительной причины. Вместо этого используйте что-то специфичное для домена, а не для конкретной платформы, например, идентификатор книги.