Java 我将如何在main(String[]args)中显示它,以及如何在xml中连接这些类和/或构造函数?

Java 我将如何在main(String[]args)中显示它,以及如何在xml中连接这些类和/或构造函数?,java,xml,spring,validation,target,Java,Xml,Spring,Validation,Target,我试图验证一个字符串是否有一个与之关联的数字,如果它有一个数字,则拒绝该值。这是我第一次使用Spring验证,几天来我一直在努力正确设置它。如果字符串不包含数字,我希望它打印出来,但是如果它包含数字,则被验证器拒绝。我也不确定参数是否为目标值。我不确定这一切是如何运作的。以下是我到目前为止的情况: @Component public class StringValidator implements Validator { public boolean supports(Class&

我试图验证一个字符串是否有一个与之关联的数字,如果它有一个数字,则拒绝该值。这是我第一次使用Spring验证,几天来我一直在努力正确设置它。如果字符串不包含数字,我希望它打印出来,但是如果它包含数字,则被验证器拒绝。我也不确定参数是否为目标值。我不确定这一切是如何运作的。以下是我到目前为止的情况:

@Component
public class StringValidator implements Validator
{   
    public boolean supports(Class<?> clazz) 
    {
        return Main.class.isAssignableFrom(clazz);
    }

    @Autowired
    public void validate(Object target, Errors errors)
    {
        //the 2nd parameter in ValidationUtils needs to be the string the validator takes in, which should be a set value from Main...?
        Main main = (Main) target;
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, String.valueOf(main), AppConstants.NULL_ERROR_MSG);

        if(!errors.hasErrors())
        {
            boolean containsNbr = false;
            for(char c : String.valueOf(main).toCharArray())
            {
                if(Character.isDigit(c))
                {
                    containsNbr = true;
                    break;
                }
            }

            if(containsNbr)
            {
            errors.rejectValue(String.valueOf(main), AppConstants.NUMBERS_ERROR_MSG);
            }

            else
            {
                System.out.println(String.valueOf(main));
            }
        }
    }
}
applicationContext.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:context="http://www.springframework.org/schema/context"  
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation=
    "http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd">

     <context:component-scan base-package="com.imports.validationexample"/>

     <bean id="main" class="com.imports.validationexample.application" />

     <bean id ="springValidator" class="com.imports.validationexample.validation.StringValidator" />

     <bean id="main" class="com.imports.validationexample.application.main">
        <property name="string" value="Forty8"/>
     </bean>

     <bean id="validate" class="org.springframework.validation.Validator">
        <constructor-arg ref="Validator"/>
     </bean>

</beans>

我似乎无法正确地连接它,并且不确定如何在我的主要类中表示它。感谢您的帮助

这里有一种方法可以改进: app-context.xml

MyStringHoldingBean:

package com.foo.bar;

public class MyStringHoldingBean {
    private String string;

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }
}
字符串验证程序:

package com.foo.bar;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class StringValidator implements Validator {
    public boolean supports(Class<?> clazz) {
        return MyStringHoldingBean.class.isAssignableFrom(clazz);
    }

    public void validate(Object target, Errors errors) {
        MyStringHoldingBean main = (MyStringHoldingBean) target;
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "string", "Not null string, please!");

        if (!errors.hasErrors()) {
            boolean containsNbr = false;
            for (char c : main.getString().toCharArray()) {
                if (Character.isDigit(c)) {
                    containsNbr = true;
                    break;
                }
            }

            if (containsNbr) {
                errors.rejectValue("string", "String contains numbers!");
            }

            else {
                System.out.println(main.getString());
            }
        }
    }
}
pom.xml

<properties>
        <spring.framework.version>3.2.6.RELEASE</spring.framework.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.1.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
    </dependencies>

Spring验证是关于验证bean的,所以这就是为什么我将该字符串放在MyStringHoldingBean类中。

我不明白您想做什么。我看到您正在向一个类main中注入一个字符串,该类似乎是一个公共静态void主类。您希望Spring验证您正在注入的字符串吗?我在java.net.URLClassLoader.findClassURLClassLoader.java:421在java.lang.ClassLoader.loadClassClassLoader.java:652在sun.misc.Launcher$AppClassLoader.loadClassLauncher.java:346在java.lang.ClassLoader.LoadClassLoader.java:618。。。另外,您得到的错误只是类路径中缺少一个jar,也许我的pom会帮助您。
package com.foo.bar;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class StringValidator implements Validator {
    public boolean supports(Class<?> clazz) {
        return MyStringHoldingBean.class.isAssignableFrom(clazz);
    }

    public void validate(Object target, Errors errors) {
        MyStringHoldingBean main = (MyStringHoldingBean) target;
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "string", "Not null string, please!");

        if (!errors.hasErrors()) {
            boolean containsNbr = false;
            for (char c : main.getString().toCharArray()) {
                if (Character.isDigit(c)) {
                    containsNbr = true;
                    break;
                }
            }

            if (containsNbr) {
                errors.rejectValue("string", "String contains numbers!");
            }

            else {
                System.out.println(main.getString());
            }
        }
    }
}
<properties>
        <spring.framework.version>3.2.6.RELEASE</spring.framework.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.1.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
    </dependencies>