我在代码中有以下情况:
动作
@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异步加载数据。
我怎样才能做到这一点?
答案 0 :(得分:0)
模型驱动的拦截器将模型推送到值堆栈的顶部。因此,您可以直接访问模型属性。
<s:property value="%{color}" />
<s:property value="%{manufacturer}" />
答案 1 :(得分:0)
解决方案是将ID添加到form
和sj: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,一切正常:)
看下面评论中的链接