当前位置: 首页 > 面试题库 >

如何在Spring MVC中将对象绑定到命令对象的列表集合中

乐成济
2023-03-14
问题内容

我的命令对象具有对象列表。我想将文本字段绑定到该列表内对象的属性。在Spring MVC中可以做吗?

命令对象类

public class SubDevisonDto {

private String devId;
private List subDevisions;

列表中提到的细分对象类

public class SubDivison implements Serializable{

private String subDivisonName;
private String createdBy;
private String createdDate;
private String developerID;
private List users;

我希望文本框设置subDivisonName字段的值。

我已经像这样编写了Spring MVC标签

<spring:bind path="subdivisondto.subDevisions[0].subDivisonName">
    <span class="formw">
        <input name="subDivisonName" type="text" style="width:350px;" />
    </span>
</spring:bind>

仅出于测试目的,我将其设置为0。如果可以,则可以将其设置为变量。我的要求是,我应该让用户动态添加细分对象。因此,最初在页面加载时,我只会显示一个文本框。如果他要添加更多按钮,我会给他添加按钮。当他单击添加按钮时,我将动态生成文本框。之后,我必须提交带有列表的表格。

此jsp代码给我一个错误。它说:

org.springframework.beans.NullValueInNestedPathException

无论如何,我可以在jsp代码中执行此操作吗?


问题答案:

我找到了问题的答案。但是,这不是我需要的解决方案,因为我需要实现动态列表。但是我找到了解决这个问题的方法。

据我了解,第一次我们必须从后端发送数据以绑定输入元素。我没有找到一种方法来绑定表单元素,该表单元素无需从beck
end发送列表数据就可以接受输入。但是,当我们发送数据并绑定元素时,我们可以从这些元素中获取输入。因此,我认为在这种情况下绑定元素,我们需要首次发送数据。如果此说法有误,请纠正我。因为,这对我来说将是一个更好的解决方案。

我们需要使用惰性列表,并且对jsp代码进行了一些修改。

您的命令类对象应按如下所述创建。

import org.apache.commons.collections.list.LazyList;
import org.apache.commons.collections.FactoryUtils;



public class SubDevisonDto {

    private String devId;

    private List subDevisions = 
        LazyList.decorate(
          new ArrayList(),
          FactoryUtils.instantiateFactory(SubDivison.class));

JSP代码应如下所示。

<c:forEach items="${subs.subDevisions}" var="obj" varStatus="gridRow">

绑定输入元素文本框

<spring:bind path="subdivisondto.subDevisions[${gridRow.index}].subDivisonName">
      <span class="formw"><input name="<c:out value="${status.expression}"/>" type="text"  style="width:350px;" />

绑定输入元素复选框。该输入元素构成一个列表。

<spring:bind path="subs.subDevisions[${gridRow.index}].users">
              <c:forEach items="${obj.users}" var="dependenttwo" varStatus="dependentRowtwo">
                <li>
                  <input name="<c:out value="${status.expression}"/>" type="checkbox" class="users" value="<c:out value="${dependenttwo}"/>"/>
                  <c:out value="${dependenttwo}"/>
                </li>
                </c:forEach>
                </spring:bind>

`subs` is a map key name. the value for this key `subs` is a list of my DTO objects which named as `SubDevisonDto `

这段代码对我来说很好用。

感谢给予的支持。



 类似资料:
  • 问题内容: 我有一个收集类型: 我的对象中有一个列表: B在哪里延伸A 但我不能执行以下操作: 我不明白为什么,因为Collection是由List实现的。 问题答案: 让我们假设您可以做您描述的事情: 该方法调用看起来不错,因为它是一个包含s 的集合。但是,如果允许上述分配,那么我们会遇到一个问题,因为它实际上是对实例的引用-我只是将a 添加到只能容纳s 的列表中! 阿斯克还说: 我不明白为什么

  • 我的发帖方法: 索引页表单: 当我单击submit时,browser显示为错误的请求,但没有th:field=“*{userRole}”,我可以提交表单。有什么办法解决这个问题吗? 然后如@roel所述更改了表单。 多谢了。

  • 问题内容: 我在将表单回发到控制器时遇到很多困难,该表单应该仅包含用户可以编辑的对象的数组列表。 表单可以正确加载,但是在发布时,似乎从未实际发布过任何内容。 这是我的表格: 上面的工作正常,它可以正确加载列表。但是,当我POST时,它返回一个空对象(大小为0)。我相信这是由于缺少造成的,但是无论如何这里是控制器POST方法: 我尝试添加一个,但是无论我做什么,都会导致异常。 我试过了: 我无法访

  • 我试图在集合中插入一个对象,我重载了' 但我仍然得到以下错误: /home/joju/NetBeansProjects/cppu 1/main。cpp:51:对“domino::domino(int,int)”的未定义引用 build/Debug/GNU-Linux-x86/main。o:在函数`std::less::operator()(domino const)中 /usr/include/c

  • 我很难将表单发回控制器,因为它应该只包含用户可以编辑的对象的arraylist。 表单加载正确,但在发布时,它似乎从未真正发布任何内容。 这是我的表格: 上面的工作正常,它正确加载列表。但是,当我发布时,它返回一个空对象(大小为0)。我认为这是由于缺少,但无论如何,这里有一个控制器POST方法: 我尝试添加一个,但不管我做什么,它都会导致异常。 我试过: 我不能访问当前客户端(编译错误),我甚至不

  • 我有一个类来代表一个玩家的手牌。但是,我(在另一个类中)有一个数组列表,我想在其中表示一堆玩家手。问题是我不知道如何在多手牌的数组列表中将一张牌添加到手牌中。我有一个代表卡牌和一副牌的类,效果很好。我只是试图了解如何将对象添加到数组列表中的对象。谢谢!

  • 我有List sample1=lists.newarrayList(BIGINTEGER1,BIGINTEGER2,BIGINTEGER3); 我必须创建一个新的列表sample2,其中还有一个值“bigInteger4”,以及sample1列表: 我怎么能那样做?

  • 请建议更好的方法将路线转换为路线地图。