新手求救! ssh + easyui向后台请求数据,第一次正确返回, 添加数据后再请求数据报404

IamFlare 2017-09-23 09:16:24
问题描述:
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;
}
...全文
303 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
愤怒的502 2017-09-26
  • 打赏
  • 举报
回复
你调用reload的时候,后台打个断点,看看数据是否和第一次的一样。
Jintao_Ma 2017-09-25
  • 打赏
  • 举报
回复
1.开始未注册时候,你的模糊查询时能够查到list的;注册之后再查询应该是没有值的,getList应该是null,而easyUI的rows不允许为null的,你可以判断如果getList是null,就放一个空的List<User>进去~ 2.返回值最好用一个公用的EasyUi类,然后@responseBody~ 3.是时候换成springMVC了,SpringBoot SpringCloud大势所趋~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧