Remoting - Callback method not being called
mcrandall Feb 1, 2008 9:10 AMI'm a newbie to the SEAM framework so please be patient with me.
I have successfully used the remoting (AJAX) feature. However, when I have an entity bean (generated by seam gen) that has join columns, the results are returned but the callback method does not get called. Is there something wrong with how I am handling the result set in my component?
Here is my entity bean:
@Entity @Table(name = "playbackevent") public class Playbackevent implements java.io.Serializable { private String playbackEventId; private Transaction transaction; private Enduser enduser; private Applicationversion applicationversion; private Date eventTime; private String eventType; private String image; private String machineId; private String machineName; public Playbackevent() { } public Playbackevent(String playbackEventId, Date eventTime, String image) { this.playbackEventId = playbackEventId; this.eventTime = eventTime; this.image = image; } public Playbackevent(String playbackEventId, Transaction transaction, Enduser enduser, Applicationversion applicationversion, Date eventTime, String eventType, String image, String machineId, String machineName) { this.playbackEventId = playbackEventId; this.transaction = transaction; this.enduser = enduser; this.applicationversion = applicationversion; this.eventTime = eventTime; this.eventType = eventType; this.image = image; this.machineId = machineId; this.machineName = machineName; } @Id @Column(name = "PlaybackEventID", unique = true, nullable = false, length = 32) @NotNull @Length(max = 32) public String getPlaybackEventId() { return this.playbackEventId; } public void setPlaybackEventId(String playbackEventId) { this.playbackEventId = playbackEventId; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TransactionID") public Transaction getTransaction() { return this.transaction; } public void setTransaction(Transaction transaction) { this.transaction = transaction; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "EndUserID") public Enduser getEnduser() { return this.enduser; } public void setEnduser(Enduser enduser) { this.enduser = enduser; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ApplicationVersionID") public Applicationversion getApplicationversion() { return this.applicationversion; } public void setApplicationversion(Applicationversion applicationversion) { this.applicationversion = applicationversion; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "EventTime", nullable = false, length = 0) @NotNull public Date getEventTime() { return this.eventTime; } public void setEventTime(Date eventTime) { this.eventTime = eventTime; } @Column(name = "EventType", length = 13) @Length(max = 13) public String getEventType() { return this.eventType; } public void setEventType(String eventType) { this.eventType = eventType; } @Column(name = "Image", nullable = false, length = 1000) @NotNull @Length(max = 1000) public String getImage() { return this.image; } public void setImage(String image) { this.image = image; } @Column(name = "MachineID", length = 32) @Length(max = 32) public String getMachineId() { return this.machineId; } public void setMachineId(String machineId) { this.machineId = machineId; } @Column(name = "MachineName", length = 500) @Length(max = 500) public String getMachineName() { return this.machineName; } public void setMachineName(String machineName) { this.machineName = machineName; } }
Here is my component:
@Stateful @Name("playerAction") public class PlayerAction implements Player{ @In EntityManager entityManager; private List<Playbackevent> events; public List<Playbackevent> displayEvents() { List playbackEvents = entityManager.createQuery( "from Playbackevent p") .getResultList(); events = new ArrayList<Playbackevent>(); for (int i = 0; i < playbackEvents.size(); i++) { Playbackevent bean = (Playbackevent) playbackEvents.get(i); events.add(bean); } return events; } @Destroy @Remove public void destroy() { } }
Here is the interface:
@Local public interface Player { @WebRemote public List<Playbackevent> displayEvents(); public void destroy(); }
My XHTML page:
<s:remote include="playerAction"/> <script type="text/javascript"> //<![CDATA[ Seam.Remoting.setDebug(true); var playAction = Seam.Component.getInstance("playerAction"); function displayEvents() { playAction.displayEvents(displayEventCallback); } function displayEventCallback (result) { if (result) { var eTable = document.getElementById("eventTable"); for (i=0;i<result.length;i++){ var row = eTable.insertRow(0); var cell = row.insertCell(0); var eventId = result.getImage(); cell.innerHTML = eventId; } } else { alert("No results."); } } // ]]> </script> <table id="eventTable"> </table>
Any help is greatly appreciated.