Struts 2 не будет передавать параметры из формы ExtJS в класс ActionSupport - PullRequest
0 голосов
/ 10 декабря 2010

Я реализую простую форму ExtJS, которая отправляется в класс Struts 2 ActionSupport.Код для различных компонентов выглядит следующим образом:

MyAction.java:

//packaging and imports
public class MyAction extends ActionSupport {
    private String aField;
    private String anotherField;

    public String execute() throws Exception {
        System.out.println(afield + " " + anotherField); //just checking values, atm
        return ActionSupport.SUCCESS;
    }

    public String getAField() {
        return this.aField;
    }

    public void setAField(String aField) {
        this.aField = aField;
    }

    public String getAnotherField() {
        return this.anotherField;
    }

    public void setAnotherField(String anotherField) {
        this.anotherField = anotherField;
    }
}

myForm.js:

Ext.onReady(function() {
    Ext.QuickTips.init();

    // turn on validation errors beside the field globally
    Ext.form.Field.prototype.msgTarget = 'side';

    var myForm = new Ext.form.FormPanel({
        id: 'myFormId',
        url: 'submitMyForm.action',
        defaults: {
            xtype: 'textfield'
        },
        items: [
            {
                fieldLabel: 'A Field',
                id: 'aField',
                name: 'aField',
                allowBlank: false
            },
            {
                fieldLabel: 'Another Field',
                id: 'anotherField',
                name: 'anotherField',
                allowBlank: false
            }
        ],
        renderTo: 'contentMain'
    });

    var submitButton = new Ext.Button({
        text: 'SUBMIT',
        handler: function(button, event) {
            myForm.getForm().submit({
                url: 'submitMyForm.action',
                failure: function() {
                    Ext.Msg.alert('Error', 'Can not save data.');
                }
            });
        }
    });
});

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="myPackage" namespace="/" extends="json-default">
        <action name="submitMyForm" class="mycodepackage.MyAction">
            <result name="*" type="json">
                <param name="includeProperties">aField</param>
            </result>
        </action>
    </package>
</struts>

Когда нажата кнопка отправки, мое действие выполняется должным образом, и в дополнение к стандартным данным отладки выводит на печать:

null null

Результат JSON отправляется обратно правильно, но, конечно, также является нулевым:

14:22:17,046DEBUG JSONResult:68 - Adding include property expression:  aField
14:22:17,052DEBUG JSONWriter:68 - Ignoring property because of include rule:  anotherField
14:22:17,053DEBUG JSONUtil:68 - [JSON]{"aField":null}

Теперь я понимаю, что значения, введенные в форму, должны быть вставлены в переменные экземпляра для моего класса действий.Я не прав в этом?Если нет, то что может пойти не так?Если да, что я могу сделать, чтобы данные формы отправлялись моему обработчику действий?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2010

Как только мы поняли, что данные формы неправильно передаются в запрос http, мой коллега разработал перехватчик данных формы, который мы используем для загрузки данных вручную. Для получения дополнительной информации просмотрите теги <interceptor>, <interceptor-stack> и <interceptor-ref>.

0 голосов
/ 11 декабря 2010

Все отправленные параметры будут помещены в сеттеры с одинаковыми именами.Почему бы вам сначала не проверить правильность отправки параметров формы с помощью плагина LiveHttpHeaders Firefox.

...