【问题标题】:Can not bind data to a model attribute list in jsp无法将数据绑定到jsp中的模型属性列表
【发布时间】:2019-04-01 23:03:24
【问题描述】:

我正在学习spring mvc和jsp。我的 jsp 文件中有一个表单。我想要的是使用模型属性将解析布尔列表的值更改为 jsp 文件。让我澄清一下,我正在将一个列表解析为控制器中的 jsp 文件。列表包含布尔值。首先,我需要使用复选框为列表中的每个项目创建行。如果布尔值为真复选框,则需要选中。我已经完成了这部分。但问题是,当我单击某些复选框时。对应的值需要改变。但是在单击提交按钮后,控制器会解析空列表。我对此一无所知。我也附上了代码。

控制器

@Controller
@EnableAsync
public class MyController {

    @Autowired
    private MyService myService;

    @RequestMapping(value = "/myMenu", method = RequestMethod.GET)
    public String generateForm(ModelMap model) {
        ObjectDTO menu = new ObjectDTO();
        BaseDataDTO baseDataDTO = new BaseDataDTO();
        baseDataDTO = 
        myService.getRestrictedMenuBaseData();
        List<LitsDTO> listDTOs = myService.getList();
        model.addAttribute("list", listDTOs);
        model.addAttribute("menu", menu);
        return "myMenu";
    }

    @RequestMapping(value = "/myMenu", method = RequestMethod.POST)
    public String  populateForm(ModelMap model,
        @Valid @ModelAttribute("menu") RestrictedObjectDTO menu,
        BindingResult bindingResult) {

        //here i want to print list valus
    }
}

JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My Form</title>
<meta name="viewport"
    content="width=device-width, initial-scale=1, minimum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script>
  function setList(){
    <c:forEach items="${list}" var="listItem">
        if(document.getElementById(listItem.id).checked){
            <c:set target="${listItem}"
                   property = "isdisable"
                   value = "true"  />
        }else{
            <c:set target="${listItem}"
                   property = "isdisable"
                   value = "false"  />
        }
        row = row + 1;
    </c:forEach>        
}
</script>
</head>
<body>

    <form:form action="myMenu.do" method='POST' modelAttribute="menu">
        <table> 
            <c:forEach items="${list}" var="listItem">
                <tr>
                    <td><span class="label_names req">${listItem.name}</span>
                        <c:if test="${listItem.disable}">
                            <input type="checkbox" id="${listItem.id}" checked>
                        </c:if> 
                        <c:if test="${!listItem.disable}">
                            <input type="checkbox" id="${listItem.id}">
                        </c:if>
                    </td>
                </tr>
            </c:forEach>
            <tr>
                <td align="left"><input class="input_buttons" name="action"
                    style="float: left; margin-left: 281px;" type="submit" value="save" onClick="setList()"/>
                </td>
            </tr>
         </table>
    </form:form>    
</body>                     

任何帮助都会很好

非常感谢...

【问题讨论】:

  • 你为什么在&lt;script&gt;标签中结合js和jsp代码?

标签: javascript spring-mvc jsp modelattribute


【解决方案1】:

当您提交表单时,您的控制器上的列表为空的原因是您没有在 jsp 页面中使用 spring 表单控件,因此 spring 将无法将 jsp 表单值映射到您传递给的模型的属性你的控制器。

要了解如何将 spring 模型属性与 jsp 页面元素映射,您需要查看 spring 表单属性。

看看下面链接中给出的例子, https://www.baeldung.com/spring-mvc-form-tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2013-05-01
    • 2012-06-15
    • 1970-01-01
    • 2014-12-04
    • 2014-02-20
    相关资源
    最近更新 更多