Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring中将错误消息从bean传递到表单_Java_Spring_Tomcat_Hibernate Validator - Fatal编程技术网

Java 如何在Spring中将错误消息从bean传递到表单

Java 如何在Spring中将错误消息从bean传递到表单,java,spring,tomcat,hibernate-validator,Java,Spring,Tomcat,Hibernate Validator,我有一个简单的应用程序,我在其中使用验证(它工作得很好),但是我在将错误消息传递回表单时遇到了问题。在我看到的示例中,它看起来像是“神奇地”传递回表单,而无需手动设置任何属性或其他任何内容 这是我的控制器代码: @RequestMapping(value = "/createMember", method = RequestMethod.GET) public ModelAndView showContacts() { return new ModelAndView("createMe

我有一个简单的应用程序,我在其中使用验证(它工作得很好),但是我在将错误消息传递回表单时遇到了问题。在我看到的示例中,它看起来像是“神奇地”传递回表单,而无需手动设置任何属性或其他任何内容

这是我的控制器代码:

@RequestMapping(value = "/createMember", method = RequestMethod.GET)
public ModelAndView showContacts() {

    return new ModelAndView("createMember", "command", new Member());
}

@RequestMapping(value = "/createMember", method = RequestMethod.POST)
public ModelAndView addContact(@ModelAttribute("member")
                        @Valid Member member, BindingResult result) {

    if(result.hasErrors()) {
        return new ModelAndView("createMember", "command", member);
    }     
    mba.addMember(member);         
    return getPages();
}   
这是我的createMember.jsp:

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

<html>
<head>

<script src="<c:url value="/resources/core/jquery.1.10.2.min.js" />"></script>
<script src="<c:url value="/resources/core/jquery.autocomplete.min.js" />"></script>
<link href="<c:url value="/resources/core/main.css" />" rel="stylesheet">

</head>
<body>
<form:form method="post" action="createMember.html">

    <table>
    <tr>
        <td><form:label path="firstName">First Name</form:label></td>
        <td><form:input path="firstName" value="${member.firstName}" /></td> 
        <form:errors path="firstName" cssclass="error"></form:errors>
    </tr>    
    <tr>
        <td><form:label path="lastName">Last Name</form:label></td>
        <td><form:input path="lastName" value="${member.lastName}" /></td>
        <form:errors path="lastName" cssclass="error"></form:errors>
    </tr>
    <tr>
        <td><form:label path="email1">Email</form:label></td>
        <td><form:input value="${member.email1}" path="email1" /></td>
        <form:errors path="email1" cssclass="error"></form:errors>
    </tr>

    <tr>
        <td colspan="2">
            <input type="submit" value="Add Contact"/>
        </td>
    </tr>
</table>  

</form:form>

<a href="${pageContext.servletContext.contextPath}"> Back to main page </a> 

</body>
</html>

很抱歉,我不能直接解决这个问题,但这里有一个log4j配置文件可能会有所帮助。只需确保将其部署到WAR文件中的WEB-INF/类:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
     <!-- Appenders -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p: %c{1} - %m%n" />
        </layout>
    </appender>

      <!--  Log levels:
          ALL,
          TRACE,
          DEBUG,
          INFO,
          WARN,
          ERROR,
          FATAL
       -->

    <!-- 3rdparty Loggers -->
  <logger name="org.springframework">
      <level value="TRACE" />
  </logger>

  <logger name="org.springframework.context">
      <level value="TRACE" />
  </logger>

  <logger name="org.springframework.http">
      <level value="TRACE" />
  </logger>

  <logger name="org.springframework.web">
      <level value="TRACE" />
  </logger>

    <logger name="org.springframework.core">
        <level value="TRACE" />
    </logger>

  <root>
    <priority value ="TRACE" /> 
    <appender-ref ref="console" />
  </root>

</log4j:configuration>


还要检查pom.xml或gradle配置文件。Spring版本不匹配会导致各种奇怪的问题。

尝试在控制器类中使用
@modeldattribute(“command”)
而不是
@modeldattribute(“member”)

您的表单没有支持模型(要进行验证,Spring必须知道模型中的哪个字段属于视图中的哪些字段)。为此,您需要添加
modeldattribute
属性作为Spring表单。这就是你需要担心的问题

在控制器中

@RequestMapping(value = "/createMember", method = RequestMethod.POST)
public ModelAndView addContact(@ModelAttribute("member") @Valid Member member, BindingResult result)
您给
@modeldattribute(“成员”)
的值应该在表单中提及

在视图中

<form:form method="post" modelAttribute="member" action="createMember.html">


如果您不想提及
modeldattribute=“whateveryournamehere”
,则应在控制器中使用
@modeldattribute(“命令”)
as。那么您不想使用
modeldattribute=“command”

您还可以提供成员类吗?查看您在该类中使用的验证注释会很有用。我补充说,不管我怎么说,验证本身工作得很好(如果它有错误,if(result.hasrerrors())是真的,并且已执行]这是一个奇怪的问题,我比较了一些做类似事情的代码,我看不出有多大区别。您是否在jsp文件中包含“”?另外,尝试将成员从私有更改为公共,或者为其创建公共访问器。(我在这里抓住稻草:)它应该在不添加anything@NickWeedon-我编辑了我的jsp文件,以拥有我拥有的一切,不仅仅是表单。我还为它们提供了公共访问器,用“value={member.something}存储值也很好。非常感谢!很高兴您能提供帮助。但您知道,如果您确定发布答案不是一个好主意,先生。您可以在这里阅读关于好答案的内容
<form:form method="post" modelAttribute="member" action="createMember.html">