Как передать параметр в JSP в этом случае
У меня есть структура БД, как:
Это doGet() Сервлет Контроллера как:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
getSubjects(request, response);
}
и getSubjects(запрос, ответ) - это:
private void getSubjects(HttpServletRequest request,
HttpServletResponse response) throws ServletException{
try {
List<Subject> subjects = subjectDAO.subjectList();// I'm sending subjects List as Arttribute and, Please SEE *** below
### HERE by passing subject ID Here.
List<Page> pages = pageDAO.topicList(subjectId); // Now I want to send pages List as Arttribute as well and, Please SEE### below
request.setAttribute("subjects", subjects);
request.setAttribute("pages", pages);
getServletContext().getRequestDispatcher("/view.jsp").forward(
request, response);
} catch (Exception e) {
throw new ServletException("Error ", e.getCause());
}
}
а это мой JSP
<ul class="subjects"> *** HERE below I'm getting that subjects List.
<c:forEach items="${subjects}" var="subject">
<li
<c:catch>
<c:choose>
<c:when test="${subject.subjectId == param.subj_id}">
<c:out value=" class=\"selected\""/>
</c:when>
</c:choose>
</c:catch>><a href='/contexct/super-controller?action=view-content&subj_id=
<c:out value="${subject.subjectId}"/>'>
<c:out value="${subject.subjectName}" />
</a></li>
<ul class="pages">
### HERE below I can get that pages List .But how can I get value of subjectId So that I can get pages from DB, Please SEE$$$ above.
<c:forEach items="${pages}" var="page">
<li
<c:catch>
<c:choose>
<c:when test="${page.pageId == param.topic_id}">
<c:out value=" class=\"selected\""/>
</c:when>
</c:choose>
</c:catch>><a href='/contexct/super-controller?action=view-content&topic_id=
<c:out value="${page.pageId}"/>'>
<c:out value="${page.pageName}" />
</a></li>
</c:forEach>
</ul>
</c:forEach>
</ul>
Как я получаю данные субъекта в JSP через:
<c:forEach items="${subjects}" var="subject">
Теперь, как я могу передать идентификаторы темы в эту строку в getSubjects():
List<Page> pages = pageDAO.topicList(subjectId);
Так что я могу получить страницы, соответствующие теме и установить этот список как:
request.setAttribute("pages", pages);
Надеюсь, теперь вы можете понять мою проблему
ОБНОВИТЬ
Я отлажен таким образом:
private void getSubjects(HttpServletRequest request,
HttpServletResponse response) throws ServletException{
try {
List<Subject> subjects = subjectDAO.subjectList();
List<Page> pages = null;
for (int i = 0; i < subjects.size(); i++) {
pages = pageDAO.topicList(subjects.get(i).getSubjectId());
System.out.println("List id is " + subjects.get(i).getSubjectId());
for (int i = 0; i < subjects.size(); i++) {
pages = pageDAO.topicList(subjects.get(i).getSubjectId());
System.out.println("List id is " + subjects.get(i).getSubjectId());
for (int j = 0; j < pages.size(); j++) {
System.out.println("Topics are " +pages.get(j).getTopicName());
}
}
}
request.setAttribute("subjects", subjects);
request.setAttribute("pages", pages);
getServletContext().getRequestDispatcher("/content.jsp").forward(
request, response);
} catch (Exception e) {
throw new ServletException("Cannot obtain subjects from DB", e.getCause());
}
}
я получил Console
как:
List id is 1
Topics are App User Interface
List id is 2
Topics are Java Basics
Topics are OOP
List id is 3
List id is 4
что правильно, но не смог получить эту работу
<c:forEach items="${pages}" var="page">
<li
<c:catch>
<c:choose>
<c:when test="${page.pageId == param.topic_id}">...
учитывая выше..
означает, что ничего не возвращается туда.
2 ответа
Если вы хотите получить страницы с карты, попробуйте следующий подход (Not Tested):
private void getSubjects(HttpServletRequest request, HttpServletResponse response)
throws ServletException{
try {
List<Subject> subjects = subjectDAO.subjectList();
List<Page> pages = null;
Map<String, ArrayList<Page>> subjectPageMap = null;
if(subjects!= null && subjects.size() > 0){
subjectPageMap = new HashMap<String, ArrayList<Page>>();
for(Subject subject : subjects){
pages = pageDAO.topicList(subject.getSubjectId());
pages = pages != null && pages.size() > 0 ? pages : new ArrayList<Page>();
subjectPageMap.put(subject.getSubjectId(), pages);
}
}
request.setAttribute("subjects", subjects);
request.setAttribute("subjectPageMap", subjectPageMap);
getServletContext().getRequestDispatcher("/view.jsp").forward(
request, response);
} catch (Exception e) {
throw new ServletException("Error ", e.getCause());
}
}
Хорошо, я должен был выполнить аналогичную задачу. Я использовал контроллер сервлета. Затем объект базы данных, который использовал классы для обработки извлечения данных из базы данных. Похоже, что вы не проверяете параметр "action", отправляемый сервлету.
if (action.equalsIgnoreCase("getTopic")){
int SubjectId = Integer.parseInt(request.getParameter("SubjectId"));
dao.getTopic(SubjectId);
forward = "myjsp.jsp";
request.setAttribute("subjects", dao.getAllSubjects());
} else if (action.equalsIgnoreCase("listSubjects")){
forward = "myjsp.jsp";
request.setAttribute("categories", dao.getAllSubjects());
} else {
forward = "myjsp.jsp";
}
RequestDispatcher view = request.getRequestDispatcher(forward);
view.forward(request, response);
}