liqueur 2009-08-21 10:46
浏览 229
已采纳

如何通过DWR框架调用struts2中action中的方法

RT ,谢谢各位了!

我用




这样的话不行,报服务器端的错误,

调用service层和dao层的我会使用了,只想看一下一般在项目中如果调用action中的方法的话,应该如何写?
[b]问题补充:[/b]
这个是我刚写的一个Class (已经脱离action)

public class UserLogin {

private String randomCode;
private String tag;

@Autowired
@Qualifier("userService")   
private IUserService userService;

public String checkLogin(User myUser){
    if (randomCode.equals(getSession().getAttribute("randomCode").toString())){
        if(userService.checkLogin(myUser)){
            tag = "success";
       } 
       else{
           tag = "failed";
       }
    }
    else{
         tag = "noRandNo";
    }
    return tag;

}

private HttpSession getSession() {
    return ServletActionContext.getRequest().getSession();
}

}

然后我去配置dwr.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">


<create creator="new" javascript="userManager">
  <param name="class" value="com.squall.oa.dwr.UserLogin"/>
  <include method="checkLogin"/> 
</create>

下面是JSP页面的代码:

function validateUser(){
var username,password,result;
var myUser = {};
username = $("uname").value;
password = $("upass").value;
myUser.u_name = username;
myUser.u_pass = password;
userManager.checkLogin(myUser,callBackLogin)
if ("success" == result){
alert('用户名密码正确!');
return true;
}else if ("failed" == result){
alert('用户名密码错误!');
return false;
}else {
alert('验证码错误!');
return false;
}
}

function callBackLogin(data){ 
    alert(data); 
    result = data;
} 

我其实就是为了多传到dwr中 验证码 字符串,

但是这样写

就报告了如下的错误:

[b]a server error has Occured . More information may be available in the console[/b]

但是Console里 什么服务端的异常都没有~
[b]问题补充:[/b]
哦您说的对!~~

那您看这个问题该如何解决为最佳呢?

我应该如何去设计这个验证码的字段? 把它传进service方法里么?
[b]问题补充:[/b]
好的,

我刚才测试了一下

/**

  • @日期: Aug 21, 2009 *
  • @作者: 翟立虎 */

package com.squall.oa.dwr;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.squall.oa.model.User;
import com.squall.oa.service.IUserService;

public class UserLogin {

private String randomCode;
private String tag;

// @Autowired
// @Qualifier("userService")

// private IUserService userService;

public String checkLogin(User myUser){
    if (randomCode.equals(getSession().getAttribute("randomCode").toString())){
        if(1==1){
            tag = "success";
        } 
        else{
           tag = "failed";
        }
    }
    else{
         tag = "noRandNo";
    }
    return tag;

}

private HttpSession getSession() {
    return ServletActionContext.getRequest().getSession();
}

}

我写了个测试类,如果不使用Session 那么就不会报告那个错误,

如果使用了, 还会出现那个错误

哎,我真是头疼,那我通过什么方法,得到Session,拿到验证码,

而且还不会报错呢? 非常感谢您!! 就差这点儿问题了!~~
[b]问题补充:[/b]
这样做的话,那么前台的JS怎么写传值呢?

我对回调也不是理解很深,谢谢了~~

userManager.checkLogin(myUser,<%=session%>,callBackLogin);

我这样写好像不行~
[b]问题补充:[/b]
我测试过了,还是不行,报刚才的错误~~
哎,谢谢您了,不行的话 我就绕过这个验证码吧,传到service层里判断算了!~
[b]问题补充:[/b]
谢谢楼上两位详解了!

  • 写回答

6条回答 默认 最新

  • wanghaolovezlq 2009-08-21 11:51
    关注

    前台的Js不用你改,晕

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?