Escolar Documentos
Profissional Documentos
Cultura Documentos
Note: This can also be achieved through the Spring integration – “use the Spring
OpenSessionInViewFilter which will ensure that a Hibernate Session is open” (http://
directwebremoting.org/dwr/server/hibernate)
Create an Event Manager
• src/events/EventManager.java
package events;
import org.hibernate.Session;
import java.util.Date;
import java.util.List;
import util.HibernateUtil;
public class EventManager {
public void createAndStoreEvent(String title, Date theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
}
• Src/events/EventManager.java
package events;
import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.hibernate.Session;
import java.util.Date;
import java.util.List;
import util.HibernateUtil;
@RemoteProxy
public class EventManager {
@RemoteMethod
public void createAndStoreEvent(String title, String theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDateString(theDate);
session.save(theEvent);
session.getTransaction().commit();
}
@RemoteMethod
public List listEvents() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List result = session.createQuery("from Event").list();
session.getTransaction().commit();
return result;
}
}
Annotate Event as a Data Transfer
Object
• src/events/Event.java
package events;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.directwebremoting.annotations.DataTransferObject;
import org.directwebremoting.annotations.RemoteProperty;
@DataTransferObject
public class Event {
@RemoteProperty
private Long id;
@RemoteProperty
private String title;
private Date date;
public Event() {}
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
@RemoteProperty
public String getDateString() {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
return sdf.format(this.date);
}
@RemoteProperty
public void setDateString(String dateStr) {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
try {
this.date = sdf.parse(dateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Note: We added getDateString and setDateString here, because there is no implicit conversion available between
JavaScript dates and Java dates – mostly arrays, strings, BigNumber, and primitives. See
http://directwebremoting.org/dwr/server/dwrxml/converters for more information.
Update web.xml
• WebContent/WEB-INF/web.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>classes</param-name>
<param-value>
events.Event,
events.EventManager
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
Using DWR Debug Mode
• Go to
http://localhost:8080/DWRExample/dwr/
– Click “EventManager”
– Enter “Event 1” in the first parameter of
createAndStoreEvent
– Enter “10/01/2008” in the second parameter
<script type="text/javascript">
dojo.require("dijit.form.Button");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dojox.grid.Grid");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dojoe.dojoe");
</script>
Add Dojo.E
• Add tundra class to body tag:
<body class="tundra">
• Create XML file
WebContent/dwrDojoE.xml
• And add tag
<script type="text/xml"
dojoType="dojoe.XmlScript"
src="dwrDojoE.xml"></script>
Edit Dojo.E
• WebContent/dwrDojoE.xml
<ui xmlns="html" xmlns:dijit="dijit"
xmlns:dojox="dojox">
<dijit:form.Button>
Refresh
</dijit:form.Button>
<dojox:grid.Grid id="gridNode" jsId="grid"
elasticView="0" style="height:300px;
width:500px"/>
</ui>
Where’s the Grid?!?
Create a grid layout
• WebContent/index.html
<body class="tundra">'
<script type="text/javascript">
var layout = [{
cells: [[
{
name: 'Event ID',
field: 'id',
width: 'auto'
},
{
name: 'Date',
field: 'dateString',
width: 'auto'
}, {
name: 'Event',
field: 'title',
width: 'auto'
}]]
}];
</script>
Note the correlation between the field values above and the RemoteProperty defintions of Event.java
Add the layout to the Grid
• WebContent/dwrDojoE.xml
<ui >
<dijit:form.Button>
Refresh
</dijit:form.Button>
<dojox:grid.Grid id="gridNode"
structure=“layout”
jsId="grid" elasticView="0"
style="height:300px; width:500px"/>
</ui>
Now let’s get some data
• WebContent/index.html
var putEvents = function(list){
var dataStore = new Array;
dataStore["items"] = list;
dataStore["label"] = "title";
grid.setModel(model);
grid.refresh();
grid.render();
};
Update Dojo.E
• WebContent/dwrDojoE.xml
<ui>
<dijit:form.Button
onClick="EventManager.listEvents(putEvents)">
Refresh
</dijit:form.Button>
<dojox:grid.Grid id="gridNode" jsId="grid"
elasticView="0" style="height:300px;
width:500px"/>
</ui>
Click Refresh
Create a method to create an
event
• WebContent/index.html
var createEvent = function(titleId, dateId){
var title = dojo.byId(titleId).value;
var date = dojo.byId(dateId).value;
EventManager.createAndStoreEvent(title,
date);
EventManager.listEvents(putEvents);
};
Let’s Add Input Controls
• WebContent/dwrDojoE.xml
<ui >
<dijit:form.Button onClick="EventManager.listEvents(putEvents)">
Refresh
</dijit:form.Button>
<dojox:grid.Grid id="gridNode" jsId="grid" structure="layout" elasticView="0“
style="height:300px; width:500px"/>
<label for="eventTitle" style="float: left;">Event Title:</label>
<dijit:form.TextBox style="float: left;" id="eventTitle" value=""/>
<label for="eventDate" style="float: left;">Event Date:</label>
<dijit:form.DateTextBox id="eventDate" value="" style="float: left;"/>
<dijit:form.Button style="float: left;“
onclick="createEvent('eventTitle', 'eventDate')" label="Add Event">
</dijit:form.Button>
</ui>
Reload the page
Enter a title and date
Load data at startup
• WebContent/index.html
dojo.addOnLoad(function() {
EventManager.listEvents(putEvents);
});
Final note
• If using more complex object models with
Hibernate, use the
HibernateBeanConverter3 – See http://
directwebremoting.org/dwr/server/hibernate