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}" />
Другие вопросы по тегам