Почему отправка формы с помощью Ajax не устанавливает данные модели с помощью ModelDriven в Struts 2?

У меня есть следующая ситуация в коде:

Класс действия:

@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#output

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

Интересно, почему это происходит? Данные модели не обновляются после отправки.

Я использую тег отправки struts2-jquery.

Когда я использую простую отправку формы без Ajax, модель обновляется, но я хочу загружать данные асинхронно с помощью Ajax.

Как я могу этого добиться?


person Dariusz Mydlarz    schedule 12.06.2014    source источник
comment
Почему вы используете modeldriven?   -  person Aleksandr M    schedule 12.06.2014


Ответы (2)


Решение состоит в том, чтобы добавить 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>

ИЗМЕНИТЬ

Как оказалось, нужно только добавить ID в form, и все работает :)
смотрите ссылку в комментарии ниже

person Dariusz Mydlarz    schedule 12.06.2014

modelDriven перехватчик помещает модель поверх valueStack. Таким образом, вы можете напрямую обращаться к свойствам модели.

<s:property value="%{color}" />
<s:property value="%{manufacturer}" />
person Roman C    schedule 12.06.2014
comment
Спасибо, но это не помогает, я нашел решение, которое я опишу через минуту - person Dariusz Mydlarz; 12.06.2014