问题:调用不了后台的方法,弹出对话框“Error”的错误web.xml
 <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>
        <init-param>
            <param-name>activeReverseAjaxEnabled</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>
                initApplicationScopeCreatorsAtStartup
            </param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>maxWaitAfterWrite</param-name>
            <param-value>100</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>    <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd"><dwr>
<allow>
<create creator="new" javascript="usbiz">
<param name="class" value="com.test.dao.UsersDaoImpl" />
</create>
</allow>
</dwr>
html页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>首页</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  <script type='text/javascript' src='dwr/interface/usbiz.js'></script>
  <script type='text/javascript' src='dwr/engine.js'></script>
  <script type='text/javascript' src='dwr/util.js'></script>


<script language="javascript" type="text/javascript">
function getChildAreaname(){
usbiz.getUserByLogin("sa","sa",result);
}
function result(data){
 alert("aa");
}

</script>
  </head>
  
  <body onload="getChildAreaname();">
  
  </body>
</html>
java代码
package com.test.dao.impl;import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.test.dao.UsersDao;
import com.test.entity.Users;public class UsersDaoImpl extends HibernateDaoSupport implements UsersDao { public Users getUserByLogin(String username, String password) {
Session session=this.getSession();
String hql="from Users where userName=? and password=?";
Query query=session.createQuery(hql);
query.setString(0, username);
query.setString(1, password);
List list=query.list();
if(list.size()>0){
return (Users) list.get(0);
}
return null;
}
}

解决方案 »

  1.   

    struts2本身就有类似dwr那种远程方法调用
    在struts2的环境下没用过dwr
      

  2.   


    struts2只是用来显示页面转向等等的框架 和dwr有什么关系。DWR一般都是和spring整合,建议楼主看看dwr+spring
      

  3.   

    后台不报任何错误,只是弹出提示框“Error”
      

  4.   

    其实我也不太知道问题出在哪里,不过之前有用到过,去把我的一些文件贴出来吧:
    web.xml        <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> <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
    dwr.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd"><dwr>  <allow>
      <!-- new 出来,赋给test变量 -->
       <create creator="spring" javascript="aclService">
       <param name="beanName" value="aclService"></param>
       </create>
      </allow></dwr>index.jsp<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@include file="/common/common.jsp"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script language="javascript" src="js/public.js"></script>
    <link href="css/oa.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="dwr/engine.js"></script>
    <script type="text/javascript" src="dwr/util.js"></script>
    <script type="text/javascript" src="dwr/interface/aclService.js"></script>
    <script type="text/javascript">
    //授权
    function addOrUpdatePermission(field){dwr.engine.setAsync(false);
    //如果被选择上,则同时选择其"不继承"和"启用"checkbox
    if(field.checked)
    {
    $(field.resourceSn+"_USE").checked = true;
    <c:if test="${type eq 'User' }">
    $(field.resourceSn+"_EXT").checked = true;
    </c:if>
    }
    if(!$(field.resourceSn+"_R").checked)
    {
    $(field.resourceSn+"_R").checked = true;
    aclService.addOrUpdatePermission("${type}",${sn},field.resourceSn,1,field.checked);
    }
    aclService.addOrUpdatePermission(
    "${type}",
    ${sn},
    field.resourceSn,
    field.permission,
    field.checked
    );
    if(field.name && field.checked)
    {
    $(field.name+"_R").checked = true;
    $(field.name+"_USE").checked = true;
    <c:if test="${type eq 'User' }">
    $(field.name+"_EXT").checked = true;
    </c:if>
    addOrUpdatePermission($(field.name+"_R"));
    }
    }//设置用户的继承特性
    function addOrUpdateExtends(field){
    dwr.engine.setAsync(false);
    aclService.addOrUpdateUserExtends(
    ${sn},
    field.resourceSn,
    !field.checked
    );
    }//点击启用checkbox
    function usePermission(field){
    //如果checkbox被选中,意味着需要更新ACL的状态
    //更新C/R/U/D以及Extends状态

    //设置为同步方式,以便DWR依次发出下列请求
    dwr.engine.setAsync(false);

    if(field.checked){
    addOrUpdatePermission($(field.resourceSn+"_C"));
    addOrUpdatePermission($(field.resourceSn+"_R"));
    addOrUpdatePermission($(field.resourceSn+"_U"));
    addOrUpdatePermission($(field.resourceSn+"_D"));
    <c:if test="${type eq 'User' }">
    addOrUpdateExtends($(field.resourceSn+"_EXT"));
    </c:if>
    }else{
    aclService.delPermission(
    "${type}",
    ${sn},
    field.resourceSn
    );
    $(field.resourceSn+"_C").checked = false;
    $(field.resourceSn+"_R").checked = false;
    $(field.resourceSn+"_U").checked = false;
    $(field.resourceSn+"_D").checked = false;
    <c:if test="${type eq 'User' }">
    $(field.resourceSn+"_EXT").checked = false;
    </c:if>


    if(field.cid)
    {
    if(!$(field.resourceSn+"_R").checked)
    {
    var b = document.getElementsByName(field.cid);
    for(i=0;i<b.length;i++)
    {
    b[i].checked = false;
    <c:if test="${type eq 'User' }">
    $(b[i].resourceSn+"_EXT").checked = false;
    </c:if>
    if(!b[i].pid)
    {
    aclService.addOrUpdatePermission("${type}",${sn},b[i].resourceSn,b[i].permission,false);
    }
    }
    }

    }
    }
    }function initTable(){
    aclService.findAclRecord(
    "${type}",
    ${sn},
    function(datas){
    for(var i=0; i < datas.length; i++){
    var resourceSn = datas[i][0];
    var cState = datas[i][1];
    var rState = datas[i][2];
    var uState = datas[i][3];
    var dState = datas[i][4];
    var extState = datas[i][5];

    $(resourceSn+"_C").checked = cState == 0 ? false : true;
    $(resourceSn+"_R").checked = rState == 0 ? false : true;
    $(resourceSn+"_U").checked = uState == 0 ? false : true;
    $(resourceSn+"_D").checked = dState == 0 ? false : true;

    if($(resourceSn+"_C").checked || $(resourceSn+"_R").checked || $(resourceSn+"_U").checked || $(resourceSn+"_D").checked)
    {
    <c:if test="${type eq 'User' }">
    $(resourceSn+"_EXT").checked = extState == 0 ? true : false;
    </c:if>
    $(resourceSn+"_USE").checked = true;
    }
    }
    }
    );
    }</script>
    <c:choose>
    <c:when test="${type eq 'Role' }">
    <c:set var="title" value="请给角色【${role.name }】授权" />
    </c:when>
    <c:otherwise>
    <c:set var="title" value="请给用户【${user.username }】授权" />
    </c:otherwise>
    </c:choose>
    <title>${title }</title>
    </head>
    <body onload="initTable()" style="text-align: center">
    <center>

    <TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:580px;">
    <TBODY>
    <TR>
    <!-- 这里是添加、编辑界面的标题 -->
    <td align="center" class="tdEditTitle">${title }</TD>
    </TR>
    <TR>
    <td>
    <!-- 主输入域开始 --><table class="tableEdit" style="width:580px;" cellspacing="0" border="0" cellpadding="0" align="center">

    <tr>
    <td class="tdEditLabel" width="15%">顶级模块</td>
    <td class="tdEditContent" width="15%">二级模块</td>
    <td class="tdEditLabel" width="40%">权限</td>
    <c:if test="${type eq 'User' }">
    <td class="tdEditLabel" width="15%">不继承</td>
    </c:if>
    <td class="tdEditLabel" width="15%">启用</td>
    </tr>

    <!-- 输出模块树 -->
    <c:forEach items="${modules }" var="module">
    <tr>
    <td width="15%">${module.name }</td>
    <td width="15%"></td>
    <td width="40%">
    <input type="hidden" id="${module.id }_C"
    onclick="addOrUpdatePermission(this)" resourceSn="${module.id }"
    permission="0">
    <input type="hidden" id="${module.id }_R"
    onclick="addOrUpdatePermission(this)" resourceSn="${module.id }"
    permission="1"> <input type="hidden" id="${module.id }_U"
    onclick="addOrUpdatePermission(this)" resourceSn="${module.id }"
    permission="2"> <input type="hidden" id="${module.id }_D"
    onclick="addOrUpdatePermission(this)" resourceSn="${module.id }"
    permission="3">
    </td>
    <c:if test="${type eq 'User' }">
    <td width="15%"><input type="hidden" id="${module.id }_EXT"
    onclick="addOrUpdateExtends(this)" resourceSn="${module.id }"></td>
    </c:if>
    <td width="15%"><input type="checkbox" id="${module.id }_USE" cid="${module.id }"
    onclick="usePermission(this)" resourceSn="${module.id }"></td>
    </tr>
    <c:forEach items="${module.children }" var="child">
    <tr>
    <td></td>
    <td>${child.name }</td>
    <td>
    <input type="checkbox" name="${child.parent.id }" tid="c"
    id="${child.id }_C" onclick="addOrUpdatePermission(this)"
    resourceSn="${child.id }" permission="0">
    添加 <input type="checkbox" name="${child.parent.id }" tid="c"
    id="${child.id }_R" onclick="addOrUpdatePermission(this)"
    resourceSn="${child.id }" permission="1">
    浏览 <input type="checkbox" name="${child.parent.id }" tid="c"
    id="${child.id }_U" onclick="addOrUpdatePermission(this)"
    resourceSn="${child.id }" permission="2">
    修改 <input type="checkbox" name="${child.parent.id }" tid="c"
    id="${child.id }_D" onclick="addOrUpdatePermission(this)"
    resourceSn="${child.id }" permission="3">
    删除
    </td>
    <c:if test="${type eq 'User' }">
    <td><input type="checkbox" id="${child.id }_EXT"
    onclick="addOrUpdateExtends(this)" resourceSn="${child.id }"></td>
    </c:if>
    <td><input type="checkbox" id="${child.id }_USE" name="${child.parent.id }" pid="b" dt="a"
    onclick="usePermission(this)" resourceSn="${child.id }"></td>
    </tr>
    </c:forEach>
    </c:forEach>
    </table> <!-- 主输入域结束 -->
    </td>
    </TR>
    </TBODY>
    </TABLE><TABLE>
    <TR align="center">
    <TD colspan="3" bgcolor="#EFF3F7">
    <input type="button" class="MyButton"
    value="关闭窗口" onclick="window.close()">
    </TD>
    </TR>
    </TABLE>
    </center>
    </body>
    </html>
    这是我之前用到的,因为只用了一次,忘了怎么搞吧。。
      

  5.   

    补充,是不是参数个数出错了?下面是你的代码:usbiz.getUserByLogin("sa","sa",result);
    public Users getUserByLogin(String username, String password) {
      

  6.   

    你试一下,在浏览器中输入 http://localhost/[项目名]/dwr, 看看能不能打啊,
    要是可以的话,在那个页面调用一下你的方法,后台设断点,看看能不能进后台调试。。