DWR annotations can be used as a replacement as well as in conjunction with dwr.xml
.
Annotation support was written by Maik Schreiber.
To use DWR with annotations you need to specify a different DWR controller servlet in your web.xml
:
<servlet> <description>DWR controller servlet</description> <servlet-name>DWR controller servlet</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>classes</param-name> <param-value> com.example.RemoteFunctions, com.example.RemoteBean </param-value> </init-param> </servlet>
The classes
servlet parameter must provide a comma-separated list of the fully-qualified class names of all annotated classes to be used with DWR.
The syntax for inner classes is to use '$' notation (as used by Class.forName()) rather than '.' notation (as used by import statements). For example, use java.util.Map$Entry
and not java.util.Map.Entry
.
To make a simple class available for remote access, use the @Create
and @RemoteMethod
annotations:
@RemoteProxy public class RemoteFunctions { @RemoteMethod public int calculateFoo() { return 42; } }
Any method not annotated with @RemoteMethod
will not be available for remote access.
To use a scripting name different from the class name, use the name
attribute of @RemoteProxy
:
@RemoteProxy(name="Functions") public class RemoteFunctions { }
To make simple bean classes available for remote access, use the @DataTransferObject
and @RemoteProperty
annotations:
@DataTransferObject public class Foo { @RemoteProperty private int foo; public int getFoo() { return foo; } @RemoteProperty public int getBar() { return foo * 42; } }
To use more sophisticated converters see the converter
attribute of the @DataTransferObject
annotation.