2015-08-30 2 views
1

Мне нужно вручную отображать данные из базы данных на странице jsp. Но это не будет отображаться.Показать данные на странице jsp

Моя сущность:

@Entity 
@NamedQuery(name="Contact.getAll", query="SELECT c FROM Contact c") 
public class Contact implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
private String login; 
private String name; 
private String surname; 

getters/setters/equals/hashcode 

Bean управлять JSP:

public class DisplayDataBean { 

private EntityManagerFactory emf = Persistence.createEntityManagerFactory("ContactsPU"); 
private EntityManager em = emf.createEntityManager(); 
private List<Contact> contacts = em.createNamedQuery("Contact.getAll", Contact.class).getResultList(); 

public List<Contact> getContacts() { 
    return contacts; 
} 
} 

И страница JSP фрагмент:

 <c:forEach var="contact" items="${DisplayDataBean.contacts}"> 
      <tr> 
       <td><c:out value="${contact.login}"/></td> 
       <td><c:out value="${contact.name}"/></td> 
       <td><c:out value="${contact.surname}"/></td> 
      </tr> 
     </c:forEach> 

Можете ли вы сказать, что может быть неправильно здесь? Заранее спасибо.

Кроме того, когда я работаю с

<sql:query var="contacts" dataSource="jdbc/contactapplication"> 
    SELECT * FROM contact; 
</sql:query> 

все в порядке.

Проблема была в том, что я не объявлял DisplayDataBean. Решение является добавление тегов в JSP странице:

<jsp:useBean id="displayBean" class="web.DisplayDataBean"/> 

ответ

0

Вы не объявляя переменную contacts так, чтобы она не отображается, когда вы используете JSTL тег, то вы используете переменную contacts.

Я использую Spring, тогда добавьте эту переменную contacts в ModelMap, чтобы ее можно было восстановить.

ModelMap mm = new ModelMap(); 
mm.put("contacts", values); 

Или, если вы используете сервлет, просто добавьте эту переменную в параметр ответа. request.setAttribute("contacts", "value");

+0

Ну, я не использую ни весну, ни сервлеты. Это всего лишь 3 файла. Элементы атрибута должны иметь список контактов. – ihavelostmypants

0

Возможно, вам придется указать физическое имя таблицы для вашей организации. Я думаю, что чувствительность к регистру может вызвать проблемы здесь («контакт» и «контакт» не обязательно считаются одинаковыми).

Кроме того, я не уверен на 100%, но @NamedQuery, возможно, придется вложиться в @NamedQueries - поэтому определение предприятие может начать так:

@Entity 
@Table(name="contact") 
@NamedQueries({ 
    @NamedQuery(name="Contact.getAll", query="SELECT c FROM Contact c") 
}) 
public class Contact implements Serializable { 
// the rest of the class definition goes here... 

Если включена функция отладки, вы можете быть способный видеть, был ли запрос действительно выпущен или если он «провалился» еще до этого.

Кстати, когда вы говорите «он не отобразится», значит ли это, что ничего не отображается c:forEach? Оставляет ли она пустую таблицу, нули или вообще ничего? Пример сгенерированного вывода может помочь.

Предполагаю, что в консоли/журнале нет исключений?

+0

Да, это пустой стол. – ihavelostmypants

Смежные вопросы