我有一个控制器,它为模型设置了几个值并发送给jsp。在jsp中,我需要将这些值(作为标签)以及来自用户的附加值显示为输入值。当我提交jsp时,我只获得用户输入的有效值,并且控制器先前设置的值为空。
<form:form
action="${pageContext.request.contextPath}/admin/deviceAction.html"
modelAttribute="deviceData">
<table class="gridtable" width="500px">
<tr>
<td>Device Name : </td>
<td>${deviceData.deviceName}</td>
</tr>
<tr>
<td>Model Name : </td>
<td>${deviceData.modelName}</td>
</tr>
<tr>
<td>Serial No : </td>
<td>${deviceData.serialNo}</td>
</tr>
<tr>
<td>Device Id : </td>
<td>${deviceData.deviceId}</td>
</tr>
<tr>
<td>Status : </td>
<td>${deviceData.statusCode}</td>
</tr>
<tr>
<td>Action : <span class="required">*</span></td>
<td>
<form:select path="deviceAction" >
<form:option value="" label="--- Select ---" />
<form:options items="${model.actionList}" />
</form:select>
</td>
</tr>
</table>
<input type="submit" value="Submit" id="btn_submit">
</form:form>
控制器:
public ModelAndView beforeSubmit() {
ModelAndView modelView = new ModelAndView();
DeviceData deviceData = new DeviceData();
deviceData.setDevicePk("123");
deviceData.setAccessToken("abcwetrwertewrtetr");
deviceData.setDeviceId("deferterterterterwtetetertg");
deviceData.setDeviceName("test");
deviceData.setEnrolledDate("7-8-13");
deviceData.setModelName("test1");
deviceData.setSerialNo("test2dsfgdfgdfg");
deviceData.setStatusCode("test3");
List<String> actionList = getActionList();
Map<String, List<String>> model = new HashMap<String, List<String>>();
model.put("actionList", actionList);
modelView.addObject("deviceData", deviceData);
modelView.addObject("model", model);
modelView.setViewName("admin/tokenSearchResult");
}
public ModelAndView afterSubmit() {
@ModelAttribute("deviceData") DeviceData deviceData, BindingResult result) {
logger.info("#################device datas are : " + deviceData.getDevicePk() + "###### " + deviceData.getDeviceAction());
return new ModelAndView();
}
deviceData.getDevicePk()为null
只有下拉值具有有效值。屏幕上显示的其他值将被视为空。
编辑:
直到现在我才找到一个解决方案:
<form:input path="deviceName" readonly="true" />
但这种方式看起来并不好看。屏幕中的可编辑和不可编辑值混合。寻找更好的答案
最后我使用隐藏参数来解决问题。
示例:
<td>${deviceData.deviceName}</td>
替换为:
<td><form:hidden path="deviceName"</td>
通过这种方式,它可以帮助我避免任何CSS工作(我不太舒服)
如果有人得到更好的解决方案,请在此处发布
答案 0 :(得分:2)
您需要使用Spring form tags将它们变成表单输入,其方式与表单的方式非常相似:select。如果用户无法编辑它们,您可以随时禁用它们。
答案 1 :(得分:1)
您可以简单地隐藏这些输入。例如:
<input type="hidden" name="VehSeriesModelId" value="${vehDetailsVM.id }">
这样,您可以将数据发送到controller
,用户也无法编辑该值。另一方面,您的form
也不会显示它:)