发布
社区首页 >问答首页 >spring boot 1.3.5表单: jsp未显示错误

spring boot 1.3.5表单: jsp未显示错误
EN

Stack Overflow用户
提问于 2016-07-12 03:34:54
回答 0查看 922关注 0票数 0

我正在将spring-mvc web应用程序从spring 4.X升级为spring boot war。

页面提供服务,表单被提交,验证被执行(并记录一个错误),但是jsp在表单中显示任何错误:错误

在THe -boot之外,spring-boot同样可以很好地工作。

为了确保我正确地设置了我的spring boot jsp应用程序,我简单地向现有的"spring-boot-sample-web-jsp“添加了一个表单post (参见https://github.com/spring-projects/spring-boot/tree/1.3.x/spring-boot-samples )

这是模型对象

代码语言:javascript
代码运行次数:0
复制
  package sample.jsp;
  import java.io.Serializable;
  public class EmailHolderPageModel implements Serializable {
    private String emailAddress;

    public EmailHolderPageModel() {
        super();
    }

    public EmailHolderPageModel(String emailAddress) {
        super();
        this.emailAddress = emailAddress;
    }


    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

}

以下是服务器端:

代码语言:javascript
代码运行次数:0
复制
@Autowired
private EmailSaveValidator emailSaveValidator;

@RequestMapping("/saveEmail.html")
public ModelAndView processEmail(@ModelAttribute("myModel") EmailHolderPageModel pageModel, BindingResult result){

    ModelAndView modelAndView = null;

    emailSaveValidator.validate(pageModel, result);

    if(result.hasErrors()){
        modelAndView = new ModelAndView("enterEmail");
        EmailHolderPageModel pm = new EmailHolderPageModel("");
        modelAndView.addObject("myModel", pm);
        System.err.println("!Validation!");

    } else {

        modelAndView = new ModelAndView("thankyou");
        ThankyouPageModel thankYoupageModel = new ThankyouPageModel();
        modelAndView.addObject("thankyouModel", thankYoupageModel);
    }

    return modelAndView;
}

下面是验证器

代码语言:javascript
代码运行次数:0
复制
@Component
public class EmailSaveValidator implements Validator {

    public boolean supports(Class candidate) {
        return EmailHolderPageModel.class.isAssignableFrom(candidate);
    }

    public void validate(Object obj, Errors errors) {

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "emailAddress", "emailRequired", "required field");

    }
}

下面是jsp (由于stackoverflow变得混乱,所以略有删节)

代码语言:javascript
代码运行次数:0
复制
<%@ page session="false"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

<html>
<head>
    <title>test entering email</title>
</head>
<body>

    <form:form commandName="myModel" method="POST" action="saveEmail.html" >
        <form:errors path="emailAddress"  htmlEscape="false" />
        <div id="formIntro">
            <spring:message  text="enter email address" />
            <p><strong><label>
                <spring:message  text="email address:" /> </label><form:input path="emailAddress" size="35" maxlength="200"/>
                </label>
            </strong></p>
        </div>
        <input type="submit" value="Submit" />
    </form:form>

</body>
</html>

pom文件是(spring-boot-sample-web-jsp中未修改的)

代码语言:javascript
代码运行次数:0
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <!-- Your own application should inherit from spring-boot-starter-parent -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-samples</artifactId>
        <version>1.3.6.BUILD-SNAPSHOT</version>
    </parent>
    <artifactId>spring-boot-sample-web-jsp</artifactId>
    <packaging>war</packaging>
    <name>Spring Boot Web JSP Sample</name>
    <description>Spring Boot Web JSP Sample</description>
    <url>http://projects.spring.io/spring-boot/</url>
    <organization>
        <name>Pivotal Software, Inc.</name>
        <url>http://www.spring.io</url>
    </organization>
    <properties>
        <main.basedir>${basedir}/../..</main.basedir>
        <m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>



    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>




        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>



    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

==============

解决方案是不要在出错时创建新的模型对象(尽管在不是spring启动应用程序的情况下工作得很好):

代码语言:javascript
代码运行次数:0
复制
@RequestMapping("/saveEmail.html")
public ModelAndView processEmail(@ModelAttribute("myModel") EmailHolderPageModel pageModel, BindingResult result){

    ModelAndView modelAndView = null;

    emailSaveValidator.validate(pageModel, result);

    if(result.hasErrors()){
        modelAndView = new ModelAndView("enterEmail");
        // !! SOLUTION !!
        // DO NOT CREATE A NEW MODEL OBJECT
        // !! SOLUTION !!
        // EmailHolderPageModel pm = new EmailHolderPageModel("");
        modelAndView.addObject("myModel", pageModel);
        System.err.println("!Validation!");

    } else {

        modelAndView = new ModelAndView("thankyou");
        ThankyouPageModel thankYoupageModel = new ThankyouPageModel();
        modelAndView.addObject("thankyouModel", thankYoupageModel);
    }

    return modelAndView;
}
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38314802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档