问题描述:
        easyui向UserAction_list先请求数据,数据为转为json格式返回列表页面, 正确显示!
按F12, HTTP请求详细如下图
        在页面中点击添加用户, 请求UserAction_register保存(成功保存到数据库了), 然后easyui重新请求UserAction_list, 此时利用F12, 查看到控制台报异常HTTP Status 404 - No result defined for action cn.itcast.web.action.UserAction and result error
      然后再怎么刷新页面, 都是报此异常, easyui的dategird也获取不到数据了!      这个问题困扰我一整天了,各种百度无效, csdn论坛是我最后的希望!!!
     大家抽空帮我这菜鸟看看, 不胜感激!!!        页面主要代码如下:<script>
function submitForm() {
            // submit the form
            $('#ff').submit();
        }        $(function(){
            $('#w').window('close'); //表示页面加载完成就关闭w窗口
//*********************************************************************************************************
            //使表单进行ajax提交
            $('#ff').form({
url:'${pageContext.request.contextPath}/UserAction_register',
                onSubmit: function(){
                // do some check
                // return false to prevent submit;
return true; //让表单直接提交
             },
             success:function(data){
                    $('#w').window('close');
                    /*$('#test').datagrid('reload');*/
             }
});
            //*********************************************************************************************************
var time = new Date().getTime();
            $('#test').datagrid({
                title:'用户列表', //在面板头部显示的标题文本。数据表格标题
                iconCls:'icon-search', //设置一个16x16图标的CSS类ID显示在面板左上角。数据表格图标
                /*width:700,
                height:350,*/
                nowrap: false, //如果为true,则在同一行中显示数据。设置为true可以提高加载性能。
                striped: true, //是否显示斑马线效果。
                collapsible:true, //定义是否显示可折叠按钮。
                url:'${pageContext.request.contextPath}/UserAction_list?time='+time, //一个URL从远程站点请求数据。
                sortName: 'user_id', //定义哪些列可以进行排序。
                sortOrder: 'asc', //定义列的排序顺序,只能是'asc'或'desc'。
                remoteSort: false, //定义从服务器对数据进行排序。
                idField:'code', //指明哪一个字段是标识字段。
                frozenColumns:[[ //同列属性,但是这些列将会被冻结在左侧。
                    {field:'ck',checkbox:true},
                    {title:'用户ID',field:'user_id',width:80,sortable:true}
                ]],
                columns:[
                    [
                     {title:'基本信息',colspan:2},
{field:'opt',title:'Operation',width:100,align:'center', rowspan:2,
formatter:function(value,rec){
return '<span style="color:red">修改 删除</span>';
}
                     }
                 ],[
                     {field:'user_name',title:'用户名',width:120},
                     {field:'user_code',title:'登录名',width:120,rowspan:2,sortable:true,
                         sorter:function(a,b){
                            return (a>b?1:-1);
                        }
                    },
                    /*{field:'col4',title:'Col41',width:150,rowspan:2}*/
                ]],
                pagination:true, //如果为true,则在DataGrid控件底部显示分页工具栏。
                rownumbers:false, //如果为true,则显示一个行号列。
                toolbar:[{
                    id:'btnadd',
                    text:'添加用户',
                    iconCls:'icon-add',
                    handler:function(){
                        $('#btnsave').linkbutton('enable');
                        $('#w').window('open');
                    }
                },{
                    id:'btncut',
                    text:'删除用户',
                    iconCls:'icon-cut',
                    handler:function(){
                        $('#btnsave').linkbutton('enable');
                        alert('cut')
                    }
                },'-',{
                    id:'btnsave',
                    text:'保存',
                    disabled:true,
                    iconCls:'icon-save',
                    handler:function(){
                        $('#btnsave').linkbutton('disable');
                        alert('save')
                    }
                }]
            });
            var p = $('#test').datagrid('getPager');
            $(p).pagination({
                onBeforeRefresh:function(){
                    alert('before refresh');
                }
            });
        });
struts.xml主要代码如下:<struts>
<!-- #  struts.objectFactory = spring 将action的创建交给spring容器
struts.objectFactory.spring.autoWire = name spring负责装配Action依赖属性
-->
<constant name="struts.objectFactory" value="spring"></constant>
<!--struts2跟servlet请求冲突问题,解决办法之一:直接在struts2配置文件中修改action后缀名-->
<!--<constant name="struts.action.extension" value="action" />--> <package name="crm" namespace="/" extends="struts-default" >
<!--拦截器声明-->
<interceptors>
<interceptor name="privilegeInterceptor" class="cn.itcast.web.interceptor.PrivilegeInterceptor">
<param name="excludeMethods">login, register</param>
</interceptor>
<!--配置拦截器栈-->
<interceptor-stack name="myStack">
<interceptor-ref name="privilegeInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors> <!--关闭使用拦截器栈-->
<!--<default-interceptor-ref name="myStack"></default-interceptor-ref>--> <!--配置全局视图-->
<global-results>
<result name="toLogin" type="dispatcher">/login.jsp</result>
</global-results> <global-exception-mappings>
<exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping>
</global-exception-mappings>
                  <action name="UserAction_*" class="userAction" method="{1}" > <!--<result name="toHome" type="redirect" >/index.htm</result>
<result name="error" >/login.jsp</result>
<result name="register">/register.jsp</result>-->
</action>
</package>
</struts>UserAction主要代码如下://page和rows是easyui进行分页使用的属性
private Integer page;
private Integer rows;
public String list(){
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
if(StringUtils.isNotBlank(user.getUser_name())){
dc.add(Restrictions.like("cust_name","%"+user.getUser_name()+"%"));
} PageBean pb = userService.getPageBean(dc, page, rows); //easyui要求的json数据格式为["total":"","rows":{"user_id":"","user_name":"","user_code":"" }]
//total为中记录数, rows为每行显示的数据 Map map = new HashMap();
map.put("total", pb.getTotalItem());
map.put("rows",pb.getList()); //使用fastjson将map转换为json
//转json数据时存在递归的问题,由于类之间有相互引用的关系
String json = JSON.toJSONString(map); System.out.println(json);
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
try {
response.getWriter().write(json);
} catch (IOException e) {
throw new RuntimeException(e);
}
ActionContext.getContext().put("pageBean", pb);
//easyui要求返回json数据,所以此处return null;
return null;
} public String register() {
//1.调用service保存user
try {
userService.saveUser(user);
} catch(Exception e){
ActionContext.getContext().put("error",e.getMessage());
return "register";
}
//2.转发到login.jsp
/*return "toLogin";*/ //使用了easyui所以需要使用
return null;
}

解决方案 »

  1.   

    1.开始未注册时候,你的模糊查询时能够查到list的;注册之后再查询应该是没有值的,getList应该是null,而easyUI的rows不允许为null的,你可以判断如果getList是null,就放一个空的List<User>进去~
    2.返回值最好用一个公用的EasyUi类,然后@responseBody~
    3.是时候换成springMVC了,SpringBoot  SpringCloud大势所趋~
      

  2.   

    你调用reload的时候,后台打个断点,看看数据是否和第一次的一样。