Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод данных из БД в JSP используя JSTL (ч. 2), Помогите найти ошибку! 
:(
    Опции темы
KasDmi
Дата 18.2.2009, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.1.2009
Где: Обнинск, Россия

Репутация: нет
Всего: нет



Я начинающий, поэтому сильно не пинайте. smile
В общем, ситуация такова: есть база данных, есть бин, который через JPA и hibernate работает с полями этой БД, есть манагер, который управляет бинами и есть JSP страничка, куда надо значение из БД вывести.
Делаю так:

Question.java
Код

@Entity
@Table(name = "QUESTIONS")
@NamedQueries({
        @NamedQuery(
                name = "getQuestions",
                query = "select q from Question q"
        )
})
public class Question implements Serializable {
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name = "QUESTION")
    private String value;
    @Column(name = "ANSWER_ID")
    private int rightAnswerId;

    public Question() {
    }

    public Question(int id, String question) {
        this.id = id;
        this.value = question;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String question) {
        this.value = question;
    }

    public int getRightAnswerId() {
        return rightAnswerId;
    }

    public void setRightAnswerId(int rightAnswerId) {
        this.rightAnswerId = rightAnswerId;
    }
}


QuestionManager.java
Код

public class QuestionManager implements Manager {
    @PersistenceUnit(unitName = "TestingList")
    EntityManager entityManager;

    public void init() {
        entityManager = Main.getInstance().getEntityManager();
    }

    public Question getQuestion(int id) {
        return entityManager.find(Question.class, id);
    }

    public ArrayList<Question> getQuestions() {
        Query query = entityManager.createNamedQuery("getQuestions");
        return (ArrayList<Question>) query.getResultList();
    }

    public void destroy() {
        entityManager.clear();
    }
}


index.jsp
Код

<html>

<head>
    <title>Testing List</title>
</head>

<body>
[<a href="manage_list.jsp">Manage List</a>]
</body>
</html>


manage_list.jsp
Код

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<jsp:useBean id="question" class="ru.testinglist.bean.Question"/>
<jsp:useBean id="questionManager" class="ru.testinglist.manager.QuestionManager"/>

<html>
<c:import url="index.html"/>
<body>
<table border="1" align="center" width="100%">
    <tr>
        <td align="center" width="80%"><strong>Question</strong></td>
        <td align="center"><strong>Action</strong></td>
    </tr>


    <%--<c:forEach var="question" items="${questionManager.questions}">--%>
    <tr>
        <td><c:out value="${questionManager.questions.question.value}"/></td>
        <td>
            <button>Edit</button>
            <button>Delete</button>
        </td>
    </tr>
    <%--</c:forEach>--%>

</table>

</body>
</html>


web.xml
Код

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    
</web-app>


В итоге, если я запускаю это всё как обычное десктопное приложение, то все записи из БД без проблем в консоль выводятся, а когда запускаю как вэб, то при переходе на страничку manage_list.jsp в браузере отображается такая ошибка:
Код

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /manage_list.jsp at line 25

22: 
23:     <%--<c:forEach var="question" items="${questionManager.questions}">--%>
24:     <tr>
25:         <td><c:out value="${questionManager.questions.question.value}"/></td>
26:         <td>
27:             <button>Edit</button>
28:             <button>Delete</button>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "value" with value "${questionManager.questions.question.value}": An error occurred while getting property "questions" from an instance of class ru.testinglist.manager.QuestionManager (java.lang.NullPointerException)
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    org.apache.jsp.manage_005flist_jsp._jspService(manage_005flist_jsp.java:120)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

java.lang.NullPointerException
    ru.testinglist.manager.QuestionManager.getQuestions(QuestionManager.java:29)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.taglibs.standard.lang.jstl.ArraySuffix.evaluate(ArraySuffix.java:278)
    org.apache.taglibs.standard.lang.jstl.ComplexValue.evaluate(ComplexValue.java:107)
    org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:204)
    org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:163)
    org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:101)
    org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:129)
    org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.evaluate(ExpressionEvaluatorManager.java:75)
    org.apache.taglibs.standard.tag.el.core.ExpressionUtil.evalNotNull(ExpressionUtil.java:48)
    org.apache.taglibs.standard.tag.el.core.OutTag.evaluateExpressions(OutTag.java:99)
    org.apache.taglibs.standard.tag.el.core.OutTag.doStartTag(OutTag.java:57)
    org.apache.jsp.manage_005flist_jsp._jspx_meth_c_005fout_005f0(manage_005flist_jsp.java:164)
    org.apache.jsp.manage_005flist_jsp._jspService(manage_005flist_jsp.java:100)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.
Apache Tomcat/6.0.14


Объекты QuestionManager и Question создаются, но вот значения получить не удаётся...  smile 

PM MAIL   Вверх
AntonSaburov
Дата 18.2.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Так у тебя просто ошибка в синтаксисе.

Код

    <%--<c:forEach var="question" items="${questionManager.questions}">--%>
    <tr>
        <td><c:out value="${questionManager.questions.question.value}"/></td>
        <td>
            <button>Edit</button>
            <button>Delete</button>
        </td>
    </tr>
    <%--</c:forEach>--%>


У тебя есть объект questionManager. У него есть коллекция questions. Но почему вдруг у коллекции появилось поле question ?
PM MAIL WWW ICQ   Вверх
KasDmi
Дата 18.2.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.1.2009
Где: Обнинск, Россия

Репутация: нет
Всего: нет



Исправил
Код

<c:forEach var="question" items="${questionManager.questions}">
    <tr>
        <td><c:out value="${question.value}"/></td>
        <td>
            <button>Edit</button>
            <button>Delete</button>
        </td>
    </tr>
    </c:forEach>


Все равно не работает.  smile 

Код

org.apache.jasper.JasperException: An exception occurred processing JSP page /manage_list.jsp at line 23

20:     </tr>
21: 
22: 
23:     <c:forEach var="question" items="${questionManager.questions}">
24:     <tr>
25:         <td><c:out value="${question.value}"/></td>
26:         <td>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


PM MAIL   Вверх
KasDmi
Дата 18.2.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.1.2009
Где: Обнинск, Россия

Репутация: нет
Всего: нет



И если я, например, в методе getQuestion жетко зашиваю какое-нибудь число вместо параметра id, и вызываю этот метод в JSP
Код

<c:out value="${questionManager.question}"/>


то у меня вываливается такой эксепшн:
Код

org.apache.jasper.JasperException: An exception occurred processing JSP page /manage_list.jsp at line 34

31: 
32: </table>
33: 
34: <c:out value="${questionManager.question}"/>
35: 
36: </body>
37: </html>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "value" with value "${questionManager.question}": Unable to find a value for "question" in object of class "ru.testinglist.manager.QuestionManager" using operator "." (null)
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:852)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
    org.apache.jsp.manage_005flist_jsp._jspService(manage_005flist_jsp.java:111)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "value" with value "${questionManager.question}": Unable to find a value for "question" in object of class "ru.testinglist.manager.QuestionManager" using operator "." (null)
    org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:109)
    org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:129)
    org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.evaluate(ExpressionEvaluatorManager.java:75)
    org.apache.taglibs.standard.tag.el.core.ExpressionUtil.evalNotNull(ExpressionUtil.java:48)
    org.apache.taglibs.standard.tag.el.core.OutTag.evaluateExpressions(OutTag.java:99)
    org.apache.taglibs.standard.tag.el.core.OutTag.doStartTag(OutTag.java:57)
    org.apache.jsp.manage_005flist_jsp._jspx_meth_c_005fout_005f0(manage_005flist_jsp.java:155)
    org.apache.jsp.manage_005flist_jsp._jspService(manage_005flist_jsp.java:100)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)



Может проблема в инициализации QuestionManager..?  smile 
PM MAIL   Вверх
ecologist
Дата 19.2.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 5
Всего: 9



А как ты помещаешь questionManager на страницу ? И где он заполняется данными ?
PM MAIL   Вверх
KasDmi
Дата 19.2.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.1.2009
Где: Обнинск, Россия

Репутация: нет
Всего: нет



Вот здесь помещаю на страницу
Код

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<jsp:useBean id="question" class="ru.testinglist.bean.Question"/>
<jsp:useBean id="questionManager" class="ru.testinglist.manager.QuestionManager"/>
<html>
<c:import url="index.html"/>
<body>


А насчет заполнения, я так понимаю что его не надо заполнять. Вызываю метод getQuestions и мне возвращается коллекция объектов Question из БД. Может я и не прав...
PM MAIL   Вверх
KasDmi
Дата 19.2.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.1.2009
Где: Обнинск, Россия

Репутация: нет
Всего: нет



Всё разобрался! В манагере метод инит заменил конструктором и удалил несколько, по-моему, ненужных библиотек из WEB-INF/lib. Все работает! Всем спасибо, тема закрыта!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.