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;
}
}
Посмотреть местоположение 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 ответа
Решение состоит в том, чтобы добавить идентификатор 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
и все работает:)
посмотрите на ссылку в комментарии ниже
Перехватчик, управляемый моделью, помещает модель поверх стека значений. Таким образом, вы можете получить доступ к свойствам модели напрямую.
<s:property value="%{color}" />
<s:property value="%{manufacturer}" />