我需要在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 :(得分:0)
您没有声明变量contacts
以便它不显示,当您使用JSTL标记时,您使用变量contacts
。
我使用的是Spring,请将此contacts
变量添加到ModelMap
,以便可以检索。
ModelMap mm = new ModelMap();
mm.put("contacts", values);
或者,如果您使用的是Servlet,则只需将此变量添加到响应参数即可。
request.setAttribute("contacts", "value");
答案 1 :(得分:0)
您可能必须为实体提供物理表名称。我认为区分大小写可能会导致问题(&#34;联系&#34;和&#34;联系&#34;不一定被视为相同)。
另外,我不是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...
如果您启用了调试,您可能能够查看查询是否实际已发出,或者是否&#34;失败&#34;甚至在那之前。
顺便说一句,当你说&#34;它不会显示&#34;时,它是否意味着c:forEach
没有呈现任何内容?它是渲染空表,空值还是什么都没有?生成的输出示例可能有所帮助。
我假设控制台/日志中没有可见的异常?