nojave 2009-08-10 11:27
浏览 394
已采纳

Help!!! Struts2+ExtJs action返回结果输出到其他页面的问题

想要实现的是获取action返回后跳转到另外的页面(struts.xml控制),并把数据用GridPane输出.也就是用gridpanel替换掉""标签的作用.
例如 getUser.jsp->submit->searchuser.action->(json string)userlist->userlist.jsp(gridpanel显示).
请问,ExtJs是AJAX 实现的话,[color=red]action是否一定是将数据返回到提交页面的?[/color]例如 getUser.jsp->searchuser.action->getUser.jsp.
如果是,那应该怎样将数据转移给我想要跳转的页面(userlist.jsp)?
下面是我做的一个例子,跳转到userlist.jsp后GridPanel[color=red]只看到Grid而没有数据[/color],初学ExtJs,请各位多多指教!!

getUser.jsp(action="searchuser")用于提交用户ID,略过.

struts.xml
[code="xml"]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">


method="searchUser">
/userlist.jsp



[/code]

响应searchuser.action的class:userAction

[code="java"]
package com.prodinfo.action;

import java.util.Map;
import java.util.List;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Collection;
import com.prodinfo.biz.*;
import com.prodinfo.common.*;
import com.prodinfo.dao.*;
import com.prodinfo.pojo.Logger;
import com.prodinfo.pojo.SysUsr;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;

public class UserAction extends ActionSupport {

private String userid;
private String password;
private String username;
private String usrpwdques;
private String usrpwdans;
private String usremail;
private ILoggerDao loggerdao;
private IUserOperation uo;
private ComDate comdate;
private ComSession ssn;
private SysUsr sysusr;

public String userlist;

public UserAction() {
    comdate = new ComDate();
    ssn = new ComSession();
}
public String getUserid() {
    return userid;
}
public void setUserid(String userid) {
    this.userid = userid;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getUsrpwdques() {
    return usrpwdques;
}
public void setUsrpwdques(String usrpwdques) {
    this.usrpwdques = usrpwdques;
}
public String getUsrpwdans() {
    return usrpwdans;
}
public void setUsrpwdans(String usrpwdans) {
    this.usrpwdans = usrpwdans;
}
public String getUsremail() {
    return usremail;
}
public void setUsremail(String usremail) {
    this.usremail = usremail;
}
public void setLoggerdao(ILoggerDao loggerdao) {
    this.loggerdao = loggerdao;
}
public void setUo(IUserOperation uo) {
    this.uo = uo;
}
public String getUserlist() {
    return userlist;
}
public void setUserlist(String userlist) {
    this.userlist = userlist;
}
public String searchUser() {
    try {
        ComUserInfo comuserinfo = new ComUserInfo();
        if (comuserinfo.getUserid() != "") {
            List result = uo.searchUser(getUserid());
            JsonUtil ju = new JsonUtil();
            String jsresult = ju.collection2json(result);
            this.userlist = ("{" + "\"userlist\": " + jsresult + " }");
            System.out.println(userlist);
            //response.getWriter().println(userlist);
            return SUCCESS;
        } else {
            ssn.add("errmsg", "User not login yet!");
            return ERROR;
        }
    } catch (Exception e) {
        ssn.add("errmsg", e.getMessage());
        return ERROR;
    }
}

}
[/code]

userAction返回的"userlist"数据如下:

{
"userlist": [
{"usrCreateBy":"","usrCreateDate":"","usrDisableDate":"",
"usrEmail":"Frankie@together.com","usrId":"80319474","usrName":"Frankie",
"usrPwd":"1233","usrPwdAns":"1+1","usrPwdQues":"2",
"usrRemark":"","usrUpdateBy":"","usrUpdateDate":""},

{"usrCreateBy":"","usrCreateDate":"","usrDisableDate":"",
"usrEmail":"Justin@together.com","usrId":"80334272","usrName":"Justin",
"usrPwd":"1234","usrPwdAns":"2","usrPwdQues":"1+1",
"usrRemark":"nothing","usrUpdateBy":"","usrUpdateDate":""},

{"usrCreateBy":"","usrCreateDate":"","usrDisableDate":"",
"usrEmail":"Justin@together.com","usrId":"sa","usrName":"sysadmin",
"usrPwd":"a","usrPwdAns":"2","usrPwdQues":"1+1",
"usrRemark":"nothing","usrUpdateBy":"","usrUpdateDate":""}
]
}

输出页面的js:
userlist.js:
[code="java"]
/*

Ext.onReady(function() {
Ext.QuickTips.init();

// turn on validation errors beside the field globally
// Ext.form.Field.prototype.msgTarget = 'side';
var cm = new Ext.grid.ColumnModel([{
    header : '用户ID',
    dataIndex : 'userId'
}, {
    header : '用户昵称',
    dataIndex : 'usrName'
}, {
    header : '密码',
    dataIndex : 'usrPwd'
}, {
    header : '电子邮件地址',
    dataIndex : 'usrEmail'
}, {
    header : '密码提示问题',
    dataIndex : 'usrPwdQues'
}, {
    header : '密码提示问题答案',
    dataIndex : 'usrPwdAns'
}]);

var reader = new Ext.data.Store({
    root : 'userlist'
}, [{
    name : 'usrId',
    mapping : 'userId'
}, {
    name : 'usrName',
    mapping : 'usrName'
}, {
    name : 'usrPwd',
    mapping : 'usrPwd'
}, {
    name : 'usrEmail',
    mapping : 'usrEmail'
}, {
    name : 'usrPwdQues',
    mapping : 'usrPwdQues'
}, {
    name : 'usrPwdAns',
    mapping : 'usrPwdAns'
}]);

var pxy = new Ext.data.HttpProxy({
    url : 'searchuser.action',
    method : 'GET'
})

var ds = new Ext.data.JsonStore({
    proxy : pxy,
    reader : reader
});

var grid = new Ext.grid.GridPanel({
    store : ds,
    sm : sm,
    cm : cm,
    loadMask : {
        msg : ' 数据加载中...'
    },
    autoHeight : true
});

var sm = new Ext.grid.CheckboxSelectionModel();

var vp = new Ext.Viewport({
    layout : "border",
    frame : true,
    title : "注册",
    autoHeight : true,
    items : [{// Viewport
        region : "north",
        height : 100,
        title : "顶部面板"
    }, {
        region : "south",
        height : 50,
        title : "底部面板"
    }, {
        region : "west",
        width : "20%",
        title : "左边面板"
    }, {
        region : "east",
        width : "20%",
        title : "右边面板"
    }, {
        region : "center",
        title : "中央面板",
        items : [frm = new Ext.FormPanel({
            items : [grid]
        }       /* Eof formpanel */)
        /* Eof border center */]
    }       /* Eof Viewport */]
});
grid.render();
ds.load();
vp.render(document.body);

});

[/code]

[b]问题补充:[/b]
感谢 yourgame (资深架构师) 的回答

你完全理解错误了..

如果用到了extjs 就不需要什么跳转了.你直接输出out.print(json);

您的意思是否我在问题里提到的"ExtJs是AJAX 实现的话,action是否一定是将数据返回到提交页面的?例如 getUser.jsp->searchuser.action->getUser.jsp."?
可是如果我想把数据放到其他页面的话,我应该怎么做才能把数据送过去呢.请不吝赐教.
[b]问题补充:[/b]

感谢两位的回答,我现在转换了思路,当用户提交了之后,先进行页面跳转到userlist.jsp,然后才在userlist,jsp里去请求action的返回数据,并放到GridPanel里,不知道这种思路是否可行.
即:

getUser.jsp->Submit->redirect->userlist.jsp->searchuser.action->userlist.jsp(Grid展现)

  • 写回答

3条回答 默认 最新

  • ghost1000 2009-08-10 13:34
    关注

    有种办法,你在Action中将json格式的数据放到一个变量里,然后你转发到

    .jsp

    这个jsp就页面里这么写

    然后你在写个请求的action,负责取数据的就可以了。只不过就是把action中负责装json格式的变量统一转发到一个页面。

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

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝