struts+ajax问题

jsqybfxsy 2013-06-15 09:54:27

@Override
public class ShopAction extends ActionSupport {
public String execute(){
try {
shopService.addShop(shop);
return result = SUCCESS;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}
return result = SUCCESS;
}

public String showShop() throws Exception{
shop = shopService.getShopDAO().findById(shopId);

return SUCCESS;
}

public String getShopList(){
if (page == null) {
System.out.println("page is null!!!!!!");
return ERROR;
}
if(shop == null){
System.out.println("shop is null");
}
page = shopService.getShopDAO().getShopListByTags(shop.getType(), shop.getArea(), page);
return SUCCESS;
}
}


struts.xml

<package name="ajax" namespace="/" extends="json-default">
<interceptors>
<interceptor-stack name="myJson">
<interceptor-ref name="json"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myJson"/>
<action name="addShop" class="ShopAction">
<result type="json"></result>
</action>
</package>



$(document).ready(function(){
$('#submit').click(function(){
var params = {
'shop':{
'name':'噶',
'address':'haha',
'area':'haha',
'type':'haha',
'briIntro':'ahha',
'phone':'027-12345678'
}
};
params = JSON.stringify(params);
submit(params);
});
});

function submit(params){
$.ajax({
type:"post",
dataType:"text",
data:params,
url:"addShop.action",
contentType:"application/json",
success:function(json){
alert(json);
var obj = $.parseJSON(json);
var result = obj.result;
alert(result);
},
error:function(){
alert("error");
}
});
}


js提交ajax请求到后台之后
控制台输出这样的结果:
page is null!!!!!!

很明显服务端在执行execute()之后又执行了getShopList()
为什么会这样?怎么样才能让他不执行getShopList()
...全文
206 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wasdasdfqwer 2013-06-22
  • 打赏
  • 举报
回复
<action name="xxxAction" class="xxxxx" method="execute">试试
weilus 2013-06-20
  • 打赏
  • 举报
回复
我晕,这还真没试过,json响应你可以指定下具体的返回熟悉嘛,结果Action你一个output熟悉都没定义,result元素也没指定返回属性; 你那个struts-xml配置package不是extends了json-default嘛为嘛还要指定调用json拦截器呢,直接就可以用了嘛,json-default不是去extends了default-stack,难道你的jar包有点变态
大明哥_ 2013-06-20
  • 打赏
  • 举报
回复
为什么type要等于json呢?
dracularking 2013-06-20
  • 打赏
  • 举报
回复
光从贴出来的这点内容看,没看出会去调用getShopList,和拦截器有关?
jsqybfxsy 2013-06-20
  • 打赏
  • 举报
回复
我已经找到答案了 在struts.xml里面我们配置了

<action name="addShop" class="ShopAction">
            <result type="json"></result>
        </action>
所以在执行action之后struts会对action中的属性进行序列化,返回json 这个序列话是默认对所有get方法进行执行,所以我的getShopList方法会在最后的时候被执行 解决方案有两个,一个是命名方法的时候尽量避免使用get开头 第二个是在struts.xml中给result中加一个includeProperties属性,使得struts只序列化你执行的属性,只执行对应属性的get方法,例如我的配置是

<action name="addShop" class="ShopAction">
    <result type="json">
        <param name="includeProperties>result</param>
    </result>
</action>
jsqybfxsy 2013-06-20
  • 打赏
  • 举报
回复
引用 5 楼 shuaiguo_18 的回复:
[quote=引用 2 楼 splendid_java 的回复:] return result = SUCCESS;为什么这样写? 可以在点击提交的时候,配置你要访问哪个方法。
对啊,我也有这样的疑问?[/quote] 看我回复的7楼
jsqybfxsy 2013-06-20
  • 打赏
  • 举报
回复
引用 2 楼 splendid_java 的回复:
return result = SUCCESS;为什么这样写? 可以在点击提交的时候,配置你要访问哪个方法。
因为result是我要返回到ajax的属性, 其实是这样 result = SUCCESS; return SUCCESS; 我已近在struts.xml里面配置了啊,默认访问的是execute()方法啊
xieyongcx 2013-06-20
  • 打赏
  • 举报
回复
getShopList,换个名字,不要get开头,struts+ajax他会自动把你所有get开头的返回值封装到json中,所以你的get执行了,你的方法不要get开头就行,如果你硬是要get开头请加上@JSON(serialize=false)
ZHOU西口 2013-06-17
  • 打赏
  • 举报
回复
return result = SUCCESS;为什么这样写? 可以在点击提交的时候,配置你要访问哪个方法。
光军丶 2013-06-17
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
估计你那个ajax 同时触发了 表单提交的请求。。
shuaiguo_18 2013-06-17
  • 打赏
  • 举报
回复
引用 2 楼 splendid_java 的回复:
return result = SUCCESS;为什么这样写? 可以在点击提交的时候,配置你要访问哪个方法。
对啊,我也有这样的疑问?
编程点滴 2013-06-17
  • 打赏
  • 举报
回复
你把那个方法的代码注释掉看一下啊,我怎么看都觉得不应该调用到才对的
小丑哥_V5 2013-06-17
  • 打赏
  • 举报
回复
到我的博客下载那个项目实例吧,,,里面都是用struts+ajax应用

67,517

社区成员

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

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