Struts2 ModelDriven表单Ajax - 为什么没有设置模型数据?

时间:2014-06-12 10:05:27

标签: ajax forms struts2 model-driven

我在代码中有以下情况:

动作

@NameSpace("/")
public class MyAction extends ActionSupport implements ModelDriven<Car> {
    private Car car = new Cart();

    @Override
    public Car getModel() {
        return car;
    }

    @Action(value = "pageAction", results = {name = SUCCESS, location = "myPage", type="tiles"})
    public String showPage() {
        return SUCCESS;
    }

    @Action(value = "formSubmitAction", results = {name = SUCCESS, location = "results.jsp"})
    public String formSubmitAction() {
        System.out.println(car);
        // everything has default values (nulls)
        return SUCCESS;
    }
}

查看myPage位置

<s:form 
    namespace="/" 
    action="pageAction" 
    method="post" >
    <s:push value="model">
        <s:textfield name="color" />
        <s:textfield name="manufacturer" />
        <sj:submit
            href="formSubmitAction"         
            targets="output"  />
    </s:push>
</s:form>

<div id="output"></div>

results.jsp - 将空内容呈现为div#output

<s:property value="%{model}" />
<s:property value="%{model.color}" />
<s:property value="%{model.manufacturer}" />

我想知道为什么会这样?提交后不会更新模型数据。

我正在使用struts2-jquery SubmitTag(https://code.google.com/p/struts2-jquery/wiki/SubmitTag)。

当我使用没有ajax的简单表单提交时,模型正在更新, 但我想用ajax异步加载数据。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

模型驱动的拦截器将模型推送到值堆栈的顶部。因此,您可以直接访问模型属性。

<s:property value="%{color}" />
<s:property value="%{manufacturer}" />

答案 1 :(得分:0)

解决方案是将ID添加到formsj:submit标记。但我不知道为什么提交表单内的标签不能正常工作。正确的代码如下:

<s:form 
    id="formId"
    namespace="/" 
    action="pageAction" 
    method="post" >
    <s:push value="model">
        <s:textfield name="color" />
        <s:textfield name="manufacturer" />
        <sj:submit
            formIds="formId"
            href="formSubmitAction"         
            targets="output"  />
    </s:push>
</s:form>

修改

事实证明你只需要为form添加ID,一切正常:) 看下面评论中的链接