当前位置: 首页 > 知识库问答 >
问题:

Spring MVC@ModelAtoun无法使用用户定义的依赖项

孙永思
2023-03-14

我正在尝试使用@modeldattribute绑定数据。我有两个名为Address和Student的用户定义类。这两个数据类的结构如下所示:

住址爪哇:

package org.manya.dataClasses;

public class Address {

    private String city;
    private String state;

    public Address(String city,String state)
    {
        this.city = city;
        this.state = state;
        System.out.println("from the constructor of Address");
    }

    public Address()
    {
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

}

大学生爪哇:

package org.manya.dataClasses;

public class Student {

    private String name;
    private int age;
    private Address studentAddress;

    public Student(String name,int age,Address studentAddress)
    {
        System.out.println("from the constructor of Student = ");
        if(studentAddress == null)
        {
            System.out.println("address is null");
        }
        this.name = name;
        this.age = age;
        this.studentAddress= studentAddress;
    }

    public Student()
    {

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return studentAddress;
    }

    public void setAddress(Address studentAddress) {
        this.studentAddress = studentAddress;
    }

}

使用@modeldattribute,我试图绑定Student对象,但仅绑定String和int属性,而地址依赖项仅为null。

网状物xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <display-name>Archetype Created Web Application</display-name>

     <servlet>
        <servlet-name>frontController</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     </servlet>

     <servlet-mapping>
        <servlet-name>frontController</servlet-name>
        <url-pattern>/</url-pattern>
     </servlet-mapping>

    </web-app>

**frontController-servlet.xml**

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context = "http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <context:annotation-config/>
    <context:component-scan base-package="org.manya.Controllers"></context:component-scan>
    <mvc:annotation-driven/>
    <!-- <mvc:resources location="/resources/**" mapping="/home/*"></mvc:resources>
 -->

    <mvc:resources location="/resources/**" mapping="/static/**"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/resources/"/>
        <property name="suffix" value=".html"/>
    </bean> -->

</beans>

学生控制员。JAVA

package org.manya.Controllers;

import org.manya.dataClasses.Address;
import org.manya.dataClasses.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/student")
public class StudentController {


    @GetMapping("/studentForm")
    public String admissionForm()
    {
        return "admissionForm";
    }

    @PostMapping("/submitted")
    public ModelAndView submitted(@ModelAttribute("student") Student stud)
    {
        ModelAndView mv = new ModelAndView("submitted");
        return mv;

    }
}

接纳表格。jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- <form action="./submitted" method="post">
    NAME : <input name="name"/>
    AGE : <input name="age"/>
    CITY : <input type="text" name="city"/>
    STATE : <input type="text" name="state"/>
    SUBMIT : <input type="submit"/>
</form> -->


<form action="./submitted" method="post">
    NAME : <input name="name"/>
    AGE : <input name="age"/>
    CITY : <input type="text" name="studentAddress.city"/>
    STATE : <input type="text" name="studentAddress.state"/>
    SUBMIT : <input type="submit"/>
</form>

</body>
</html>

共有1个答案

李胤
2023-03-14

Student类中,您将studentAddress字段的getter和setter设置为getAddress()setAddress。我认为您需要将这些方法名称更改为getStudentAddress()setStudentAddress()。让我知道它是否有效。

 类似资料:
  • 我无法让我的用户定义的容器使用std::ranges。如果迭代器只是一个< code>int*的话,我的容器可以工作,但是一旦我创建了自己的迭代器类,就会出现编译器错误。 这是有效的。 https://godbolt.org/z/nxr1qe 使用我自己的迭代器,它不起作用。 https://godbolt.org/z/o9rzhf 为了实现这一点,是否需要为<code>std::ranges</

  • 我定义了一个定制的gradle插件,它的输出是MyPlugin。罐子我将jar放在build_libs dir中。以下是我使用它的方式:1)在项目构建中。格拉德尔 2)在app模块build.gradle 3)当我运行。/gradlew组装 > 错误:配置根项目“MyApp”时出现问题。 无法解决配置: classpath的所有依赖项。找不到com.wonbin.myplugin: MyPlugi

  • 如何告诉Storm使用包含在fat jar中的依赖项而不是Storm类路径中的依赖项? 以下是一些背景/细节: 是中包含的2.0和fat JAR中包含的2.7的依赖项。 使用运行拓扑似乎可以使用2.7。 使用提交拓扑似乎使用2.0而不是2.7。 是使用创建的: 在的依赖项部分下 执行时,会发现2.7的正确joda时间戳 我之所以注意到这一点,是因为我在通过命令提交拓扑时看到以下警告/错误:

  • 我对ivy没有解析我的一些依赖关系有问题。以下是我如何重现这个问题的: 我在eclipse中有一个空的java项目。我已经在我的项目中添加了ivy.xml: 这工作正常,ivy能够解决和下载口水。 如果我将修订版更改为6.3.0.Final(http://mvnrepository.com/artifact/org.drools/drools-core/6.3.0.Final),它将不起作用,我看

  • 由于butterknife依赖的错误,我无法构建android项目。 错误 任务': app: javaPreCompileDebug'执行失败。 无法解析配置的所有文件: app: dedegAnnotationProcessorClasspath。转换butterknife-compiler-8.6.0.jar失败(com.jakewharton:巴特切夫-编译器: 8.6.0)以匹配属性{a

  • 共享我的gms依赖项: 我在构建应用程序时出错了。共享错误。 共享谷歌服务gradle插件错误信息: 在“应用程序”项目中,一个已解决的Google Play services库依赖关系依赖于另一个精确版本(例如“[15.0.4]”),但不会被解决到该版本。库显示的行为将是未知的。 依赖性失败:com.google.android.gms:play-services-tagmanager-v4-i