2014-06-12 27 views
0

我有以下代码的情况:Struts2 ModelDriven Form Ajax - 为什么没有设置模型数据?

行动

@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; 
    } 
} 

查看了我的空间位置

<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输出

<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异步加载数据。

我该如何做到这一点?

+0

你为什么使用modeldriven? –

回答

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> 

编辑

事实证明,你只需要ID添加到form,和一切工作:)
看看链接在下面的评论

+1

请参阅http://stackoverflow.com/q/17443250/1700321。 –

0

模型驱动的拦截器将模型推到值栈顶部。所以你可以直接访问模型属性。

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

谢谢,但它没有帮助,我找到了解决方案,我将在一分钟内描述 – dmydlarz

相关问题