【问题标题】:How to send back the model data from jsp to controller如何将模型数据从 jsp 发送回控制器
【发布时间】:2015-12-31 03:26:55
【问题描述】:

我有一个控制器,它为模型设置很少的值并发送到 jsp。在 jsp 中,我需要显示这些值(作为标签)以及来自用户的附加值作为输入值。当我提交jsp时,我只得到用户输入的有效值,并且控制器之前设置的值为null。

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" />

但是这种方式的 UI 看起来不太好。屏幕中的可编辑值和不可编辑值混淆。寻找更好的答案

最后我使用隐藏参数来解决问题。

例子:

<td>${deviceData.deviceName}</td>

替换为:

<td><form:hidden path="deviceName"</td>

通过这种方式,它可以帮助我避免任何 css 工作(我不太舒服)

如果有人得到更好的解决方案,请在此处发布

【问题讨论】:

    标签: spring jsp spring-mvc


    【解决方案1】:

    您需要使用Spring form tags 将它们变成表单输入,其方式与使用表单:select 的方式大致相同。如果用户无法编辑它们,您可以随时禁用它们。

    【讨论】:

    • 尝试了 Mark 给出的建议,这样 UI 看起来就像一个不可编辑的文本字段。但我希望 UI 看起来像标签文本。
    • 您可以使用 CSS 的强大功能将其设置为您想要的样式。如果控制器值现在正在与表单一起重新提交,那么我认为您的原始问题已得到解答。如果您需要 CSS 帮助,如果您提出新问题,您会得到更多关注。
    【解决方案2】:

    您可以简单地隐藏这些输入。例如:

    <input type="hidden" name="VehSeriesModelId" value="${vehDetailsVM.id }">    
    

    这样,您可以将数据发送到controller,用户也将无法编辑该值。另一方面,您的form 也不会显示它:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2011-08-16
      • 2016-09-25
      • 2012-08-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      相关资源
      最近更新 更多