DWR2整合struts2和spring3

web.xml中的配置:
<!-- 配置dwr -->
      <servlet>
		<servlet-name>dwr-invoker</servlet-name>
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
		<init-param>
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>
	
    <!--用于拦截 http://localhost:8080/dwr-->
	<servlet-mapping>
		<servlet-name>dwr-invoker</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>

DWR整合Spring配置
<!-- DWR整合Spring配置 
creator属性的值可以是new,struts,spring、jsf、scripted、pageflow、none 
因为此处是整合spring来做的,所以设置成"spring", 
javascript="usercard" 表示实例转换成javascript语言后以usercard命名, 
param元素的name属性值可以是class,beanName等, 
此处用beanName,value得值是定义在applicationContext.xml中某个bean的id值。 
  --> 
<dwr> 
<allow> 
<create javascript="usercard" creator="spring"> 
<param name="beanName" value="usercard"></param> 
</create> 
<convert match="com.aptech.enterprise.entity.Usercard" 
converter="bean"> 
</convert> 
</allow> 
</dwr> 
<!--cteator 为spring 指的是使用spring 配置的bean ,javascript 为jsp页面中使用的dwr js文件名称,param name 为beanName表示使用spring中bean id 名称,value 为spring中定义的service的名称  -->


此处如果直接使用creator="new",<param name="class" value="完整的类名"/>的方式调用后台的java方法,会报出以下错误:
WARN : org.directwebremoting.dwrp.BaseCallMarshaller#warn : --Erroring: batchId[5] message[java.lang.NullPointerException]


另外在页面点击测试dwr的时候,需将web.xml中的struts的拦截属性设置为:
  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.action</url-pattern>
  </filter-mapping>

而不能使用<url-pattern>/*</url-pattern>(会拦截所有的请求),因为测试dwr的时候,地址栏是.../dwr/test/xxx,会提示在相应的namespace中没有对应于xxx的action。所以将struts改为只拦截以.action结尾的请求。

配置完后可以通过http://localhost:8080/项目名称/dwr/index.html 查看dwr.xml中配置是否成功

你可能感兴趣的:(JavaScript,spring,bean,struts,DWR)