使用dwr做了一个用户注册名校验的小例子,却发现在dwr配置文件中,dwr与Spring整合时location参数不起作用的问题:
在Spring中配置UserService:
<bean id="userServiceImpl" class="com.kevin.samples.dwr.register.service.impl.UserServiceImpl"> <property name="userDao"> <ref bean="userDAO" /> </property> </bean> <bean id="userService" parent="txProxyTemplate"> <property name="proxyInterfaces"> <list> <value>com.kevin.samples.dwr.register.service.UserService</value> </list> </property> <property name="target"> <ref bean="userServiceImpl" /> </property> <property name="transactionAttributes"> <props> <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean>
?在Spring中配置DAO:
<bean id="userDAO" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="interceptorNames"> <value>hibernateInterceptor,userDAOImpl</value> </property> </bean> <bean id="userDAOImpl" class="com.kevin.samples.dwr.register.dao.impl.UserDAOImpl"> <property name="sessionFactory"> <ref bean="hibernateSessionFactory" /> </property> </bean>
?
html页面代码:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="dwr/interface/UserService.js"></script> <script type="text/javascript" src="dwr/engine.js"></script> <script type="text/javascript" src="dwr/util.js"></script> <script type="text/javascript"> function checkUsername() { var username = dwr.util.getValue("username"); //FirstDWR.sayHello(name,callBack); UserService.isValid(username,{ callback : isValidCallback, errorHandler : function(msg){alert("timeout!");}, timeout : 10000 }); } var isValidCallback = function(data){ if (data == true) {dwr.util.setValue("msg","该用户名可用");} else if (data == false) {dwr.util.setValue("msg","用户名已被注册过,请重新输入!");} //alert(data); } </script> </head> <body> <pre> 你的用户名: <input type="text" id="username" value=""/> <input type="button" value="校验用户名是否可用" onclick="checkUsername();"> <br> <span id="msg"></span> </pre> </body> </html>
?
在dwr配置文件中配置UserService,使用代理的UserService接口:
<!-- 注册查看用户名是否已存在示例 --> <create javascript="UserService" creator="spring" > <param name="beanName" value="userService"/> <!-- 为什么不使用location参数时候才起作用? 现在Spring的所有配置文件统一放在classpath:/META-INF/目录下,但是为了测试location参数,将配置文件都移至classpath下时同样不起作用。--> <!--<param name="location" value="applilcationContext-dao.xml"/>--> </create>
?
现在的问题是直接配置location参数时候html页面根本找不到UserService, 必须在web.xml中配置Spring文件监听器:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/META-INF/applicationContext-*.xml</param-value> </context-param> <listener> <listenerclass>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
?
据说直接配置location参数去找寻Spring配置文件的时候速度上会比从web.xml文件中读取稍快点。究竟怎样location参数才起作用呢,求解!!!
?