2014-04-07 30 views
1

我目前正在处理一个组项目,我们应该处理建筑和房间之间的关系。关系是OnetoMany,我们目前能够显示来自sql的相关数据,但我们无法按照预期在一张好看的电子表格或表格中显示它。我们希望将建筑物和房间整理成一张桌子,每个房间都显示与相关建筑物的连接。我们如何将我们的HTML代码放到我们的(ShowRooms.jsp)jsp中以获取用户选择的所有房间,然后将该建筑物中的所有房间显示在一个好看的表格中?在这种状态下,我们从我们的sql数据库中获取数据,但只是一条直线,而不是通过将每个房间连接到相关建筑物的表格。提前致谢!无法以正确的顺序显示来自SQL的数据,HTML JSP

这是我们的代码:建筑:

@Entity 
@Table(name = "Building") 
public class Building { 
private String bname; 
private List<Room> rooms; // Building can have many Rooms 

@Id 
@Column(name = "Bname") 
public String getBname() { 
return bname; 
} 

public void setBname(String bname) { 
this.bname = bname; 
} 

@OneToMany(mappedBy = "building", fetch = FetchType.EAGER) 
public List<Room> getRooms() { 
return rooms; 
} 

public void setRooms(List<Room> rooms) { 
this.rooms = rooms; 
} 
} 

ROOM:

@NamedQueries({ 
@NamedQuery(name="Room.findByBname", 
query="SELECT r FROM Room r WHERE r.bname LIKE :bname"), 
}) 

@Entity 
@Table(name = "Room") 
public class Room implements Serializable { 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private RoomId id; 
private String bname; 
private Building building; 

public String getBname() { 
return bname; 
} 

public void setBname(String bname) { 
this.bname = bname; 
} 

@Id 
public RoomId getId() { 
return id; 
} 

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

@ManyToOne 
@JoinColumn(name = "Bname", insertable = false, updatable = false) 
public Building getBuilding() { 
return this.building; 
} 

public void setBuilding(Building building) { 
this.building = building; 
} 
} 

ROOMID: 

@Embeddable 
public class RoomId implements Serializable { 

private String bname; 
private String rcode; 

public RoomId() { 
} 

public RoomId(String bname, String rcode) { 
this.bname = bname; 
this.rcode = rcode; 
} 

@Column(name = "Bname", nullable = false) 
public String getbname() { 
return bname; 
} 

public void setbname(String bname) { 
this.bname = bname; 
} 

@Column(name = "Rcode", nullable = false) 
public String getrcode() { 
return rcode; 
} 

public void setrcode(String rcode) { 
this.rcode = rcode; 
} 

public boolean equals(Object other) { 
if ((this == other)) { 
    return true; 
} 

if ((other == null)) { 
    return false; 
} 

if (!(other instanceof RoomId)) { 
    return false; 
} 

RoomId castOther = (RoomId) other; 

return ((this.getbname() == castOther.getbname()) || (this.getbname() != null 
     && castOther.getbname() != null && 

this.getbname().equals(castOther.getbname()))) 

     && 

((this.getrcode() == castOther.getrcode()) ||            (this.getrcode() != null    && castOther.getrcode() != null && 

     this.getrcode().equals(castOther.getrcode()))); 
} 

public int hashCode() { 
return super.hashCode(); 
} 
} 

BUILDINGEAO:

@Stateless 
public class BuildingEAOImpl implements BuildingEAOImplLocal { 
@PersistenceContext(unitName = "LabEJBSql") 
private EntityManager em; 

public BuildingEAOImpl() { 
// TODO Auto-generated constructor stub 
} 

public Building findByBname(String bname) { 
return em.find(Building.class, bname); 
} 
} 

FACADE:

@Stateless 
public class Facade implements FacadeRemote, FacadeLocal { 
@EJB 
BuildingEAOImplLocal BuildingEAO; 
@EJB 
RoomEAOImplLocal RoomEAO; 

public Facade() { 
// TODO Auto-generated constructor stub 
} 

public List<Room> findRoomsByBname(String bname) { 
return RoomEAO.findByBname(bname); 
} 
} 

SERVLET:

@WebServlet("/TestClientServlet") 
public class TestClientServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
@EJB 
private FacadeLocal facade; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public TestClientServlet() { 
super(); 
// TODO Auto-generated constructor stub 
} 

protected void doGet(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException { 

PrintWriter out = response.getWriter(); 
out.println("TestClientServlet-doGet"); 
out.close(); 

} 

protected void doPost(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException { 

String url = null; 
// Get hidden field 
String operation = request.getParameter("operation"); 

if (operation.equals("showrooms")) { 
    String bname = request.getParameter("txtBname"); 

    List<Room> r = facade.findRoomsByBname(bname); 
    request.setAttribute("rooms", r); 
    url = "/ShowRooms.jsp"; 
} else if (operation.equals("searchbuilding")) { 
    System.out.println("TestClientServlet-searchbuilding"); 
    url = "/SearchBuilding.jsp"; 
} else { 
    url = "/SearchBuilding.jsp"; 
} 
System.out.println(url); 

RequestDispatcher dispatcher = getServletContext() 
     .getRequestDispatcher(url); 
dispatcher.forward(request, response); 
} 
*/ 
} 

SEARCHBUILDING.JSP:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO- 
8859-1"> 
<title>Search Building</title> 
</head> 
<body> 
<form action="/BuildRoomClientProject/TestClientServlet" method="post"> 

<table cellspacing="0" cellpadding="0" border="0" align="left"> 
<tr> 
<td><h2>Search Building:</h2></td> 
</tr> 
<tr> 
<td> 

<input type= "text" name= "txtBname" size ="25" maxlength="25"> 
<input type="submit" name="submit" value="Search" /> 
</td> 
<td></td> 
</tr> 
</table> 

<input name="operation" value="showrooms" type="hidden"> 

</form> 
</body> 
</html> 

SHOWROOMS.JSP:

<%@ page contentType="text/html;charset=windows-1252"%> 
<%@ page import = "org.ics.ejb.Building" %> 
<%@ page import = "org.ics.ejb.Room" %> 
<%@ page import = "org.ics.ejb.RoomId" %> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title> 
Show Rooms 
</title> 
</head> 
<body> 
<h2> 
Rooms: 
</h2> 
<%List<Room> r = (List<Room>)request.getAttribute("rooms"); %> 
<% for (Room r1 : r){ 
out.println(r1.getBname() + " " + r1.getId().getrcode()); 
}%> 
<p> 
</p> 
<form action="/BuildRoomClientProject/TestClientServlet" method="post"> 
<input type="submit" name="submit" value="Tillbaka"> 
<input name="operation" value="searchbuilding" type="hidden"> 
</form> 
</body> 
</html> 
+0

您应使用[ JSTL](https://jstl.java.net/)。 – sp00m

回答

0

为了您的JPQL,youldn't您使用GROUPBY与GROUPBY指令结合起来呢? 然后,对于每个表格条目,您都可以将bname(= BuildingName ??)渲染为第一行。 然后使您的检索表为表,一个简单的例子可以在某种程度上这样的:

<table> 
    <c:forEach var="o" items="${objects}"> 
     <tr> 
      <td>${o.bname}</td> 
      <td>${o.id}</td> 
      <td>${o.name}</td> 
      <td>${o.descriptio}</td> 
     </tr> 
    </c:forEach> 
</table> 

其实,我刚刚发现这一点:displaying a list of entities in jsp file by using java搜索“JSP,列表视图,表”

相关问题