我使用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>
目的是根据下拉列表中选择的内容呈现表单的第二部分。这可以通过下拉列表的onChange上的AJAX调用来实现,或者在noscript的情况下实现 - 按下“选择”按钮。
事物的noscript方面有效。我在下拉列表中选择了一些内容,然后按“选择”,表单的其余部分将在刷新时呈现。
但是,AJAX调用在其请求中没有刚刚选择的值。就好像在Dijit组件更新其表示之前发生了AJAX调用。这些组件是否与我使用它们的方式兼容?
如果符合以下条件我可以使用
答案 0 :(得分:0)
面对同样的问题,它的解决方法是在隐藏字段中设置所选值,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>