【问题标题】:spring form jsp binding reference beanspring form jsp绑定引用bean
【发布时间】:2018-07-09 06:10:58
【问题描述】:

我试图使用spring form 标签库绑定 POJO。绑定引用类 bean 变量后,我收到“Bad Request Error-Http Status 400”。

如果我删除引用类的绑定,我的表单提交成功并且值也被填充到类中。

public class EmployeeTourPojo {

  private String empDisplayName;

  private List<TourDetailsPojo> tourDetails;

  //getter and setter

}

public class TourDetailsPojo {

    private Date departDate;

    private String departTime;

//getters and setters

}

JSP:

<td><form:input path="empDisplayName" class="form-control"/>    </td>

<form:input placeholder="Departure Date" path="tourDetails[${index}].departDate" required="required" class="datepicker form-control"/><br/>

我从少数 articles 获得了引用,但他们在获取请求时加载引用 bean 列表,而我在提交 JSP 之前添加行。

【问题讨论】:

  • 索引是如何填充的?
  • stackoverflow.com/questions/9617207/… 这可能会解决您的问题。
  • 请发布您的控制器。我想问题出在那儿。
  • 你的第一个输入 div 是如何生成的?

标签: java jsp spring-mvc modelattribute spring-form


【解决方案1】:

我发现问题在于单击“添加行”后增加索引。因此,我添加了以下 JQuery 代码来增加索引。

$("#addRow").click(function(){
                    //alert("The button was clicked.");
                    var addressRow = $('.repeat-address').last();
                    var addressRowLength = $('.repeat-address').length;

                    var newAddressRow = addressRow.clone(true).find("input").val("").end(); 

                    $(newAddressRow).find("td input,td select").each(function(index,item) {
                        item.name = item.name.replace(/[0-9]/g,addressRowLength);
                    });

                    newAddressRow.insertAfter(addressRow);


                }); 

HTML 代码

<c:set var="index" value="0"/>
                    <td><form:input path="empDisplayName" class="form-control"/>    </td>
                    <tr class="repeat-address">

                        <td>Departure Date</td>
                        <td><form:input placeholder="Departure Date" path="tourDetails[${index}].departDate" required="required" class="datepicker form-control"/></td>


                        <td>Pincode</td>
                        <td><input type="text" name="tourDetails[${index}].departDate"/></td>
                        <td><input type="file" name="tourDetails[${index}].tourTicket"/></td>
                    </tr>
                    <tr><td colspan="3"><input id="addRow" type="button" value="Add Row"></td></tr>

因此,我还需要将输入类型文件与 POJO 绑定。我还添加了一个 Multipart 字段(在 TourDetailsPojo Bean 中)作为

private Date departDate;

private Multipart tourTicket;

//getters and setters

【讨论】:

    【解决方案2】:

    如果我正确理解了您的问题,这将对您有所帮助

    1. 在浏览器中检查你的表格行&lt;tr&gt;标签
    2. 复制 html 元素,使其成为 模板,在检查元素 右键单击复制 - > 外部 HTML
      假设生成的 HTML 元素如下所示

      这个会转换

      ...&lt;form:input placeholder="Departure Date" path="tourDetails[${index}].departDate" required="required" class="datepicker form-control"/&gt;&lt;br/&gt;...

      类似这个

      ...&lt;input placeholder="Departure Date" id="tourDetails0.departDate" name="tourDetails[0].departDate" required="required" class="datepicker form-control"/&gt;&lt;br/&gt;...

    3. 创建生成的html的模板

      var template = '...<input placeholder="Departure Date" id="tourDetails{INDEX}.departDate" name="tourDetails[{INDEX}].departDate" required="required" class="datepicker form-control"/><br/>...';

      请参阅我已将 0 替换为 {INDEX}

    4. 点击Add Row按钮,获取&lt;tr&gt;中的length,用长度替换{INDEX},使用javascript函数
      generated_template = template.replace(/{INDEX}/g,length);

    5. generated_template 附加到表中。

    希望这会有所帮助...

    【讨论】:

    • 请告诉我为什么投反对票,我会删除/更改答案
    • 感谢您的建议。添加行后在动态索引中生成似乎错误。但是,仍然需要对其进行更多测试。
    【解决方案3】:

    使用 JSTL 标签库从列表中迭代数据。

    <c:forEach var="tourDetails" items="${tourDetails}" varStatus="status">
    <form:input placeholder="Departure Date" path="tourDetails[${status.index}].departDate" required="required" class="datepicker form-control"/><br/>
    </c:forEach>
    

    在你的 JSP 开始处添加下面的 taglib。

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    

    【讨论】:

    • 正如我所提到的,我的输入 div 是动态生成的(使用 jsp 上的添加行)。所以我不能使用for循环来绑定输入变量。
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多