当前位置: 代码迷 >> J2EE >> 求老师、大神不吝赐教!解决方案
  详细解决方案

求老师、大神不吝赐教!解决方案

热度:38   发布时间:2016-04-17 23:08:30.0
求老师、大神不吝赐教!
我在使用 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;
}


}

------解决思路----------------------
直接在action中注入对象就好了
请求当中的参数名称用entity.property
  相关解决方案