Java 在jsp页面中显示数据
我需要在jsp页面中手动显示数据库中的数据。但它不会显示 我的实体:Java 在jsp页面中显示数据,java,jsp,jpa,html-table,Java,Jsp,Jpa,Html Table,我需要在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
@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
用于管理jsp的Bean:
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;
}
}
公共类DisplayDataBean{
私有EntityManagerFactory emf=Persistence.createEntityManagerFactory(“ContactsPU”);
私有EntityManager em=emf.createEntityManager();
私有列表contacts=em.createNamedQuery(“Contact.getAll”,Contact.class).getResultList();
公共列表getContacts(){
返回联系人;
}
}
和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"/>
您没有声明变量
contacts
,因此它不会显示,当您使用JSTL标记时,您使用的是变量contacts
如果您正在使用Spring,请将此contacts
变量添加到ModelMap
以便可以检索
ModelMap mm = new ModelMap();
mm.put("contacts", values);
或者,如果您使用的是Servlet,则只需将此变量添加到响应参数中。
request.setAttribute(“联系人”、“值”)
您没有声明变量contacts
,因此它不会显示,当您使用JSTL标记时,您使用的是变量contacts
如果您正在使用Spring,请将此contacts
变量添加到ModelMap
以便可以检索
ModelMap mm = new ModelMap();
mm.put("contacts", values);
或者,如果您使用的是Servlet,则只需将此变量添加到响应参数中。
request.setAttribute(“联系人”、“值”)代码>您可能必须为您的实体提供一个物理表名。我认为区分大小写可能会导致这里的问题(“联系人”和“联系人”不一定被认为是相同的)
另外,我不是100%确定,但是@NamedQuery
可能需要包含在@namedquerys
中-因此实体定义可以这样开始:
@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
不会呈现任何内容?它会呈现空表、空表还是什么都没有?生成输出的示例可能会有所帮助
我假设控制台/日志中没有可见的异常?您可能需要为实体提供一个物理表名。我认为区分大小写可能会导致这里的问题(“联系人”和“联系人”不一定被认为是相同的)
另外,我不是100%确定,但是@NamedQuery
可能需要包含在@namedquerys
中-因此实体定义可以这样开始:
@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
不会呈现任何内容?它会呈现空表、空表还是什么都没有?生成输出的示例可能会有所帮助
我假设控制台/日志中没有可见的异常?我既不使用Spring也不使用servlet。只有3个文件。属性项应该得到联系人列表。我既不使用Spring也不使用servlet。只有3个文件。属性项应该得到联系人列表。是的,它呈现了空表。是的,它呈现了空表。