2015-08-30 89 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); 

或者如果您使用的是Servlet,那么只需将该变量添加到响应参数即可。 request.setAttribute("contacts", "value");

+0

那么我不使用弹簧或servlets。这只是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