1

I'm currently working on a group project where we're supposed to handle the relation between Building and Room. The relation is OnetoMany, and we're currently able to show the relevant data from sql, but we're not able to display it in a good looking spreadsheet or table as intended. We would like to have the buildings and room sorted into a table, where each room shows connection to related building. How do we put our the HTML code in our (ShowRooms.jsp) jsp to get all rooms for building of choice by user, and then display all rooms by that building in a good-looking-table? In this state we get the data from our sql-database but just in a straight line instead of by a table which connects each room to the relevant building. Thanks in advance!

This is our code: BUILDING:

@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>
David Henriksson
  • 23
  • 1
  • 1
  • 4

1 Answers1

0

For your jpql, youldn't you use a GROUPBY combined with a GROUPBY directive? Then for each table entry that is one you get render the bname (= BuildingName ??) as first row. Then render your retrieved list as a table, a short example could be somehow this:

<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>

In fact, I just found this: displaying a list of entities in jsp file by using java searching for "jsp, listview, table"

Community
  • 1
  • 1
chris polzer
  • 3,219
  • 3
  • 28
  • 44