Spring ElementDecoration и AjaxEventDecoration несовместимы с Dijit? - PullRequest
0 голосов
/ 06 сентября 2011

Я использую Spring 3.0.5, Webflow 2.3.0 и Spring JS для оформления.

Одна из моих форм имеет следующий код:

<form:select path="selection">
    <form:option value="" label="Please select"></form:option>
    <form:options></form:options>
</form:select>

<noscript>
 <button id="btnSelect" type="submit" name="_eventId_dropDownSelectionChange">Select</button>
</noscript>

<script type="text/javascript">
Spring.addDecoration(new Spring.ElementDecoration({
    widgetType : "dijit.form.Select",
    widgetAttrs : {
        forceWidth : true,
        missingMessage : "<s:message code="NotEmpty" />",
    }
}));

Spring.addDecoration(new Spring.AjaxEventDecoration({
    elementId : "selection",
    formId : "templateModel",
    event : "onChange",
    params : {  _eventId: "dropDownSelectionChange" }
})); 
</script>

Цель состоит в том, чтобы сделатьвторая часть формы в зависимости от того, что выбрано в раскрывающемся списке.Это должно быть достигнуто либо с помощью вызова AJAX в onChange раскрывающегося списка, либо в случае noscript - нажатием кнопки «Выбрать».

Работает сторона noscript.Я выбираю что-то в раскрывающемся списке, нажимаю «Выбрать», и остальная часть формы отображается при обновлении.

Однако вызов AJAX не имеет только что выбранного значения в своем запросе.Это как если бы вызов AJAX происходил до того, как компонент Dijit обновил свое представление.Совместимы ли эти компоненты так, как я их использую?

Я могу заставить его работать, если:

  1. Я не декорирую компонент как компонент Dijit, а вместо этого просто обычныйвыпадающий список с художественным оформлением AJAX.
  2. Я ставлю вызов AJAX на кнопку вместо Dijit onChange

1 Ответ

0 голосов
/ 26 сентября 2011

Столкнулся с той же проблемой, и обходной путь для нее - установить выбранное значение в скрытом поле, а Spring.AjaxEventDecoration позаботится об остальном.

                <input id="vehicleType" name="vehicleType" type="hidden" />
                    <select id="selectVehicle">
                        <c:forEach var="vehicle" items="${vehicleTypes}">
                            <option value="${vehicle.type}"><fmt:message key="${vehicle.description}" /></option>
                        </c:forEach>
                    </select>
                </p>
                <script type="text/javascript">
                    Spring.addDecoration(new Spring.ElementDecoration({
                        elementId : 'selectVehicle',
                        widgetType : "dijit.form.Select",
                        widgetAttrs : {
                            value : "${vehicleType}",
                            onChange : function(newValue){
                            document.getElementById('vehicleType').value=dijit.byId('selectVehicle').get('value');}
                        }                           
                    }));
                    Spring.addDecoration(new Spring.AjaxEventDecoration({
                        elementId : "selectVehicle",
                        formId : "quote",
                        event : "onChange",
                        params : {
                            _eventId : "dropDownVehicleSelectionChange",
                            fragments : "body"

                        }
                    }));
                </script>
...