最近练手一个小项目,主要是ssh整合+jQuery easyUI做的界面,,问题描述:通过jQuery提交登陆表单到action,然后action处理以后,返回一个字符串给前台,
public class UserAction extends ActionSupport {
private UserManager um;
private String result;//返回结果
public String login() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
String verify = request.getParameter("verify");
String sessionVerify = (String)session.getAttribute("verify");
if(sessionVerify!=null && !"".equals(sessionVerify)) {
if(!(sessionVerify).equals(verify)) {//验证码错误
setResult(Protocal.WRING);
}else {
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String utype = request.getParameter("utype");
User user = new User(name, pass, utype);

if(um.isExist(user)){
session.removeAttribute("verify");//验证码从session中移除
session.setAttribute("user", user);//把user添加到session中
setResult(Protocal.SUCCESS);
}else {//用户名或密码错误
setResult(Protocal.FAILED);
}
}
}else {
setResult(Protocal.REMOVED);
}
return SUCCESS;
}然后action的配置:
<action name="loginAction" class="userAction" method="login">
<result type="json">
<param name="noCache">true</param>
<param name="root">result</param>
</result>
</action>这样,前台的回调函数就会获得到result的字符串,根据字符串进行判断。。
现在datagrid需要通过action获取数据,但是他需要的是json对象,,
<action name="getUser" class="userAction" method="getUser">
<result type="json">
<param name="noCache">true</param>
<param name="excludeProperties">um</param>
<!-- 上面的属性不进行序列化,返回JSON对象;如果配置root,返回一个字符串 -->
</result>
</action>
但是,这样返回后,datagrid无法获取到数据,,求解决,谢谢。。还有一个问题,通过action进行逻辑处理,,还需要获取HttpServletRequest 和session等,,这样做有什么意义呢???为什么不直接使用Servlet????

解决方案 »

  1.   

    <action name="loginAction" class="userAction" method="login">
    <result type="json">
    <param name="noCache">true</param>
    <param name="root">result</param>
    </result>
    </action>这样返回一个json字符串就行了啊,datagrid就能拿到数据了.你说的datagrid需要json对象,跟返回字符串不冲突action返回字符串后,jquery会先转化为json对象,然后datagrid用就行了
      

  2.   

    看你的 actionString sessionVerify = (String)session.getAttribute("verify");没session怎么行action就是一个servlet
      

  3.   


       <result type="json" name="abc"><param name="root">result</param></result>
             name==Action方法结束后的return "abc";
      

  4.   


    我使用了struts的json插件,$.get()的回调函数返回来的是json对象,key是result,,我使用alert(data["result"])弹出的数据如下:
    {\"total\":20,\"rows\":[{\"id\":\"1\",\"username\":\"hys\",\"realname\":\"天堂口\","+
    "\"sex\":\"男\",\"birthday\":\"1990-01-01\","+
    "\"address\":\"安徽省\",\"title\":\"学生\",\"tel\":\"15111111111\",\"email\":\"[email protected]\"}]}
    无法匹配jQuery easyUI的datagrid啊。
      

  5.   

    有session对象,只是没有贴出来,,
      

  6.   

    {\"total\":20,\"rows\":[{\"id\":\"1\",\"username\":\"hys\",\"realname\":\"天堂口\","+
    "\"sex\":\"男\",\"birthday\":\"1990-01-01\","+
    "\"address\":\"安徽省\",\"title\":\"学生\",\"tel\":\"15111111111\",\"email\":\"[email protected]\"}]}
      

  7.   

    这个不就是datagrid想要的的吗 ?哪里不对了呢
      

  8.   


    datagrid要的是json对象,那么只是个字符串,,问题解决了
      

  9.   

    谢谢大家,问题解决了。。使用json-lib包里面的JSONObject类,,需要的可以百度json-lib-2.4-jdk15.jar,挺好用的。