论坛首页 Web前端技术论坛

使用DWR,不能取值的奇怪问题

浏览 3964 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-08-31  
DWR
Javascript代码:
 

  1. <script type=< span="">"text/javascript">  
  2. /** 
  3. *  保存信息 
  4. */  
  5. function saveUpline(){  
  6.     var formObj = dwr.util.getFormValues("editForm");  
  7.     var prefix='upline.';  
  8.     var entityObj =form2entity(formObj,prefix);  
  9.     UplineService.save(entityObj,fillUpline);  
  10. }  
  11.   
  12. /** 
  13. *  填充表单数据 
  14. */  
  15. function fillUpline(upline){  
  16.     var prefix='upline.';  
  17.     var formObj =entity2form(upline,prefix);  
  18.     dwr.util.setValues(upline);  
  19. }  
  20.   
  21. /** 
  22. *   
  23. **/  
  24. function selectContact(url){  
  25.     //判断ID是否为空,ID = 空:新建;ID != 非空:编辑  
  26.     //新建时就先保存信息到数据库  
  27.     var idStr=DWRUtil.getValue("upline.id");  
  28.     if(idStr==null || idStr.length<=0){  
  29.         //给必需输入项设定初始值  
  30.         DWRUtil.setValue("upline.name","新建上线信息");  
  31.         //保存上线信息  
  32.         saveUpline();  
  33.     } 
  34.     //使用此语句就可以取到值,不使用就取不到值,延时处理也不可以。
  35.     //alert(DWRUtil.getValue("upline.id"));
  36.     idStr=DWRUtil.getValue("upline.id");  
  37.     ...............
  38. }  
  39. </script>


JSP代码
<s:textfield name="upline.id" label="Id">
 
  1. <s:textfield label="Id" name="upline.id" />  

</s:textfield>
---------------------------------------------------------------------------------------------------------------------------------------------------------

如果是编辑,【upline.id】textfield有值一切正常,
如果是新建,通过fillUpline回调函数给【upline.id】textfield设定值后通过我标记红的那个语句获取就获取不到。
         
fillUpline回调函数执行后可以看到【upline.id】textfield已经设定值了。奇怪的很!添加个alert验证是空值,
         但是下面的语句就可以取到值了。

saveUpline,和fillUpline函数可以确定执行正常,这是怎么回事呀!

   发表时间:2007-09-03  
暂时没有办法,就添加一个alert!
虽然有损用户体验,无奈之举呀。
0 请登录后投票
   发表时间:2007-09-03  
问题原因是你没有意识到DWR是异步调用.
0 请登录后投票
   发表时间:2007-09-05  
感谢fangzhouxing!

在调用DWR前添加如下代码:
//设定DWR同步执行
DWREngine.setAsync(false);

在调用DWR后添加如下代码:
//设定DWR异步执行
DWREngine.setAsync(true);

问题解决!
0 请登录后投票
   发表时间:2007-09-05  
我们用下面的形式执行同步操作,代码更加简洁:
var result;
		SysFacade.getSysConfig( {
			callback : function(retValue) {
				result = retValue;
			},
			async : false
		});
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics