【问题标题】:How to validate integer input in my form page?如何验证表单页面中的整数输入?
【发布时间】:2020-01-12 03:09:02
【问题描述】:

我正在为客户创建页面,所以一切正常,直到我想强制用户在“免费通行证”字段中输入一个数字时出错

我尝试在 Customer 类中创建一个名为 freePasses 的整数类型字段,然后为其生成 getter 和 setter,我还修改了我的 .properties 文件

客户.java

@Min(value = 0 , message="the value must be equal or greater than 0")
    @Max(value = 10, message = "the value must be equal or less than 10")
    @NotNull(message = "is required")
    private Integer freePasses;

public Integer getFreePasses() {
        return freePasses;
    }



    public void setFreePasses(Integer freePasses) {
        this.freePasses = freePasses;
    }

applocation.properties

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
typeMismatch.customer.freePasses = invalid Number

Pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>8.5.20</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.17.Final</version>
</dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

无法将 java.lang.String 类型的属性值转换为属性 freePasses 所需的 java.lang.Integer 类型;嵌套异常是 java.lang.NumberFormatException: For input string: "44xxxx"

【问题讨论】:

  • input 字段的类型可以是 number。不一定是text
  • 我使用的是 spring mvc,所以 jsp 文件是 我看不到如何在其中定义类型?
  • 我不知道spring,但我猜你添加属性type="number"
  • 好吧,spring mvc中没有类型=""
  • 您是否尝试将 @Pattern 添加到 freePasses 并且内部模式仅输入数字的正则表达式?

标签: java spring spring-boot validation jsp


【解决方案1】:

我认为&lt;form:input type=?number? path="date" /&gt; 会起作用。

【讨论】:

【解决方案2】:

创建文件:src/resources/messages.properties
并写下这一行:

typeMismatch.customer.freePasses= Invalid number

【讨论】:

    【解决方案3】:

    解决方案 1:在您的 spring 配置 xml 文件中添加以下代码

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames" value="resources/messages"></property>
    </bean>
    

    解决方案 2:更改输入元素

    这对我有用,试试这个

    【讨论】:

      【解决方案4】:

      在messages.properties 文件中,在错误类型之后,您必须指定modell 属性(在您的CustomerController 中)名称,而不是类名称。所以 typeMismatch。属性名称.freePasses=无效数字。

      【讨论】:

        猜你喜欢
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        • 1970-01-01
        相关资源
        最近更新 更多