吐血急求 dwr调用带返回值的方法得不到返回值问题

cs02308 2011-03-31 09:55:50
各位高手请指教,我最近在项目上用到了dwr,一个简单的测试例子都不能通过。
dwr.xml的配置。

<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>
<allow>
<create creator="new" javascript="workDateServer">
<param name="class" value="com.nstc.workdate.server.WorkDateServerDWR" />
<include method="isWorkDate"/>
</create>
<convert converter="bean" match="java.lang.StackTraceElement" />
</allow>
</dwr>

对应的Java类

public class WorkDateServerDWR implements Serializable {


private static final long serialVersionUID = -4333180125204704841L;

public String isWorkDate(String selectedDate,String flag){
System.out.println("======================WorkDateServerDWR start=====================");
//默认为都是工作日
String isWork="YES";
if("1".equals(flag)){
isWork="NO";
}
System.out.println("======================isWork is====================="+isWork);
System.out.println("======================WorkDateServerDWR end=====================");
return isWork;
}
}

jsp页面

<script src='dwrWorkDate/interface/workDateServer.js'></script>
<script src='dwrWorkDate/engine.js'></script>
<script src='dwrWorkDate/util.js'></script>


function fun2(obj){
obj.blur();
var workDateReturn=document.getElementById("workDateReturn");
alert(workDateReturn.value);

var a=test();
alert("test dwr return is :"+a);

alert(workDateReturn.value);
}
function test(){
var _data = "";

this.isWorkDate = function()
{
//设置成同步
DWREngine.setAsync(false);
//调用Java类Test的getString方法,callBackFun为回调函数
workDateServer.isWorkDate(function(data){_data = data;},"123","1");
//重新设置为异步方式
DWREngine.setAsync(true);

return _data;
}

return _data;
}

部署环境为weblogic81,jdk1.4.2-05
在页面调用 fun2(obj)时始终不能得到返回值。后台不报错,即alert("test dwr return is :"+a);的显示结果为
test dwr return is :
求各位大虾帮忙,到底是什么原因导致出现这样的情况,项目需要,急。
...全文
324 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
e9876 2011-04-01
  • 打赏
  • 举报
回复
workDateServer.isWorkDate(function(data){_data = data;},"123","1");

写反了,一般都是参数放前面。返回时调用的函数放最后的。

应该写成

workDateServer.isWorkDate("123","1",function(data){_data = data;});
cs02308 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 luman2002 的回复:]

页面的DWR不用写的那么复杂吧。。
JScript code

function fun2(obj){

workDateServer.isWorkDate("123","1",test)
}
function test(rtn){

alert("test dwr return is :"+rtn);
}



另外,楼主确定用DWR能去执行Java类里面的is……
[/Quote]
现在调用的时候有返回值了,如tubage408所说的,之前的写法有问题。早上又试了一下。函数写法如同luman2002格式,有返回值了,不过奇怪的是,我用onblur 来测试给页面的隐藏域赋值,第一次弹出框是隐藏域的原值,只有第二次触发blur时才能得到返回值。
luman2002 2011-04-01
  • 打赏
  • 举报
回复
页面的DWR不用写的那么复杂吧。。

function fun2(obj){

workDateServer.isWorkDate("123","1",test)
}
function test(rtn){

alert("test dwr return is :"+rtn);
}


另外,楼主确定用DWR能去执行Java类里面的isWorkDate()方法了吗
如果不行,你试试用绝对路径引用

<script src='/工程名/dwrWorkDate/interface/workDateServer.js'></script>
<script src='/工程名/dwrWorkDate/engine.js'></script>
<script src='/工程名/dwrWorkDate/util.js'></script>


cs02308 2011-03-31
  • 打赏
  • 举报
回复
<script src='dwrWorkDate/interface/workDateServer.js'></script>
<script src='dwrWorkDate/engine.js'></script>
<script src='dwrWorkDate/util.js'></script>
web.XML里配置的就是 dwrWorkDate;
cs02308 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jeky198306 的回复:]

你在回调函数中看下有没有结果,找到问题所在,一步步解决
[/Quote]
回调函数中也是没有结果的。
cs02308 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tubage408 的回复:]

<script type="text/javascript"
src="[WEBAPP]/dwr/interface/Remote.js"> </script>
<script type="text/javascript"
src="[WEBAPP]/dwr/engine.js"> </script>
...
=======================
funct……
[/Quote]
function handleGetData(str) {
alert(str);
}
Remote.getData(42, handleGetData);

另:workDateServer.isWorkDate(function(data){_data = data;},"123","1");如果这个不正确,那么用Remote.getData具体怎么写?
jeky_zhang2013 2011-03-31
  • 打赏
  • 举报
回复
你在回调函数中看下有没有结果,找到问题所在,一步步解决
tubage408 2011-03-31
  • 打赏
  • 举报
回复
<script type="text/javascript"
src="[WEBAPP]/dwr/interface/Remote.js"> </script>
<script type="text/javascript"
src="[WEBAPP]/dwr/engine.js"> </script>
...
=======================
function handleGetData(str) {
alert(str);
}
Remote.getData(42, handleGetData);
tubage408 2011-03-31
  • 打赏
  • 举报
回复
是不是isWorkDate这个方法里面什么都没打印呀?
要是的话看看
<script src='dwrWorkDate/interface/workDateServer.js'></script>
<script src='dwrWorkDate/engine.js'></script>
<script src='dwrWorkDate/util.js'></script>
这里好像配置不对吧?
当然对不对要看你web.XML里面怎么配的了。
另:workDateServer.isWorkDate(function(data){_data = data;},"123","1");
这么用还没见过

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧