求老师、大神不吝赐教!

tandy 2015-07-08 01:09:21
我在使用 SSH 练习写一个项目,由于自学JAVA EE 缺乏经验, 以下这个问题我还解决不了, 问题有点复杂 希望各位老师、大神不吝赐教!

我从网页 发送AJAX 数据到 后台 交给对应的 Action,由于我发送的数据 有对应的实体类,所以我的Action 继承了 ModelDriven<CardScheme>, Preparable ;
我想通过 ModelDriven 将 CardScheme(所有属性都有 get set 方法) 压入到栈顶 让 Struts2 给我自动装配对应的属性;
例如我调用一个 saveOrUpdate 方法时,通过前台发送请求到 Action 后 我使用 prepareSaveOrUpdate() 方法 为model 准备对象时 new CardScheme(); Action 便不在调用对应的 SaveOrUpdate() 方法; 如果我不 New 对象 就没有问题! 请问这是什么原因,有什么方法可以实现我的请求?
下边是源码
**************************************
jsp
var url = "vip-saveOrUpdate";
var args = {
"name" : $("#schemeName").val(),
"cardType" : $("#cardType option:selected").text(),
"discount" : $("#discount").val(),
"criterion" : $("#criterion").val(),
"income" : $("#income").val(),
"time" : new Date()
};
$.post(url, args, function(data) {

});


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

<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.locale" value="zh_CN"></constant>

<package name="default" namespace="/" extends="struts-default,json-default">

<!-- 定义新的拦截器栈,配置 prepare 拦截器栈的 alwaysInvokePrepare 参数值为 false -->
<interceptors>
<interceptor-stack name="invoicingSystemnStack">
<interceptor-ref name="paramsPrepareParamsStack">
<param name="perpare.alwaysInvokePrepare">false</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>

<!-- 使用定义的拦截器 -->
<default-interceptor-ref name="invoicingSystemnStack"></default-interceptor-ref>

<action name="vip-*" method="{1}" class="cardSchemeAction">
<!-- 返回json类型数据 -->
<result type="json">
<param name="root">data</param>
<param name="enableGZIP">true</param>
<param name="contentType">text/html</param>
</result>
</action>

</package>
</struts>


*****************************************
action
@Controller
@Scope("prototype")//设置非单例模式
public class cardSchemeAction extends ActionSupport implements RequestAware,
ModelDriven<CardScheme>, Preparable{

private static final long serialVersionUID = 1L;

private Map<String, Object> request;

@Override
public void setRequest(Map<String, Object> arg0) {
this.request = arg0;
}

private String data;

public String getData() {
return data;
}

public void setData(String data) {
this.data = data;
}

@Autowired
private VipService vipService;

public void setVipService(VipService vipService) {
this.vipService = vipService;
}

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCardSchemeJson() {
CardScheme cardScheme = vipService.getCardScheme(name);
Gson gson = new Gson();
data = gson.toJson(cardScheme);
System.out.println(name);
return SUCCESS;
}

public String saveOrUpdate() {

System.out.println("原生 = " + name);
return SUCCESS;
}

public void prepareSaveOrUpdate() {

if(!name.equals("new")) {
model = new CardScheme();
}
System.out.println("prepare name = " + name);
//System.out.println("栈顶对象 : " + ActionContext.getContext().getValueStack().peek());
}

@Override
public void prepare() throws Exception {}

private CardScheme model;

@Override
public CardScheme getModel() {
return model;
}


}
...全文
128 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tandy 2015-07-08
  • 打赏
  • 举报
回复
感谢楼上 你说的方法我知道 但是我想实现自动装配 我已经找到原因了 原因是我的 model 中有多对一关系 造成的延迟加载 结贴了
Coder_D 2015-07-08
  • 打赏
  • 举报
回复
直接在action中注入对象就好了 请求当中的参数名称用entity.property
tandy 2015-07-08
  • 打赏
  • 举报
回复
求大神指点 可以追加分!!! 也可分析原因 我自己去查 这个问题我已经自己试着解决了 但是 能力有限。。。
tandy 2015-07-08
  • 打赏
  • 举报
回复
为什么我发的帖子就没人看 一会就沉了

67,513

社区成员

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

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