Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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/1/cassandra/3.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 Can';t在Hibernate+;春天_Java_Spring Mvc_Spring Data Jpa_Hibernate Validator - Fatal编程技术网

Java Can';t在Hibernate+;春天

Java Can';t在Hibernate+;春天,java,spring-mvc,spring-data-jpa,hibernate-validator,Java,Spring Mvc,Spring Data Jpa,Hibernate Validator,我正在开发springmvc+Hibernate验证程序的集成示例,方法是参考。我添加了一些要从messages.properties文件中解析的消息,但没有一条消息得到解析并面临以下问题。请说明为什么应用程序无法识别messages.properties文件。我本来希望从.properties文件中得到实际的消息,但为什么会出现这种情况呢[{length.validation.country}] org.springframework.validation.BeanPropertyBindin

我正在开发
springmvc+Hibernate验证程序的集成示例,方法是参考。我添加了一些要从
messages.properties
文件中解析的消息,但没有一条消息得到解析并面临以下问题。请说明为什么应用程序无法识别
messages.properties
文件。我本来希望从.properties文件中得到实际的消息,但为什么会出现这种情况呢
[{length.validation.country}]

org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'person' on field 'country': rejected value [U]; 
codes [Length.person.country,Length.country,Length.java.lang.String,Length]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes 
[person.country,country]; arguments []; default message [country],50,2]; default message [{length.validation.country}]
Person.java

@Entity
@Table(name="PERSON")
public class Person {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    @SafeHtml(whitelistType=WhiteListType.NONE, message="{html.validation.firstname}")
    @Length(max=Constant.MAX_FIRSTNAME,min=Constant.MIN_FIRSTNAME,message="{length.validation.firstname}")
    @Column(name="FIRST_NAME")
    private String firstname;

    @SafeHtml(whitelistType=WhiteListType.NONE, message="{html.validation.lastname}")
    @Length(max=Constant.MAX_LASTNAME,min=Constant.MIN_LASTTNAME,message="{length.validation.lastname}")
    @Column(name="LAST_NAME")
    private String lastname;

    @SafeHtml(whitelistType=WhiteListType.NONE, message="{html.validation.country}")
    @Length(max=Constant.MAX_COUNTRY,min=Constant.MIN_COUNTRY,message="{length.validation.country}")
    @Column(name="COUNTRY")
    private String country;

    @SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE, message = "{html.validation.emailId}")
    @Length(max=Constant.MAX_EMAILID,min=Constant.MIN_EMAILID, message = "{length.validation.emailId}")
    @Pattern(regexp = "^(.+)@(.+)$")
    @Column(name="EMAIL_ID")
    private String emailId;
        // setters and getters
}
PersonController.java

@Controller
public class PersonController {

    private PersonService personService;

    public PersonController(){}

    public PersonController(PersonService personService){
        this.personService = personService;
    }

    @Autowired(required=true)
    @Qualifier(value="personService")
    public void setPersonService(PersonService ps){
        this.personService = ps;
    }

    @RequestMapping(value = "/persons", method = RequestMethod.GET)
    public String listPersons(Model model) {
        model.addAttribute("person", new Person());
        model.addAttribute("listPersons", this.personService.listPersons());
        return "person";
    }

    //For add and update person both
    @RequestMapping(value= "/person/add", method = RequestMethod.POST)
    public String addPerson(@Valid @ModelAttribute("person") Person p, BindingResult bindingResult){

        if(bindingResult.hasErrors()){
            System.out.println(bindingResult);
            return "redirect:/persons";
        }

        if(p.getId() == 0){
            //new person, add it
            this.personService.addPerson(p);
        }else{
            //existing person, call update
            this.personService.updatePerson(p);
        }

        return "redirect:/persons";

    }

    @RequestMapping("/remove/{id}")
    public String removePerson(@PathVariable("id") int id){
        this.personService.removePerson(id);
        return "redirect:/persons";
    }

    @RequestMapping("/edit/{id}")
    public String editPerson(@PathVariable("id") int id, Model model){
        model.addAttribute("person", this.personService.getPersonById(id));
        model.addAttribute("listPersons", this.personService.listPersons());
        return "person";
    }
}
messages.properties

html.validation.firstName=Invalid First Name
length.validation.firstName=First Name should be 2 to 50 lenght in characters
html.validation.lastName=Invalid Last Name
length.validation.lastName=Last Name should be 2 to 50 lenght in characters
html.validation.country=Invalid Country Name
length.validation.country=Country Name should be 2 to 50 lenght in characters
html.validation.emailId=Invalid Email ID
length.validation.emailId=Email ID length should not be more than 11 characters
servlet-context.xml

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


    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />
    <context:component-scan base-package="com.journaldev.spring.controller" />

    <!-- Load database.properties file -->
    <context:property-placeholder location="classpath:database.properties" />

    <!-- Enable JPA Repositories -->
    <jpa:repositories base-package="com.journaldev.spring.repository" />

    <!-- Enable Transaction Manager -->
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- Necessary to get the entity manager injected into the factory bean -->
    <beans:bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />


    <!-- ====== MYSQL DataSource ====== -->
    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <beans:property name="driverClassName" value="${mysql.jdbc.driverClassName}" />
        <beans:property name="url" value="${mysql.jdbc.url}" />
        <beans:property name="username" value="${mysql.jdbc.userName}" />
        <beans:property name="password" value="${mysql.jdbc.password}" />
    </beans:bean>

    <!-- ====== Hibernate JPA Vendor Adaptor ======= -->
    <beans:bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <beans:property name="showSql" value="true"/>
        <beans:property name="generateDdl" value="true"/>
        <beans:property name="database" value="MYSQL"/>
    </beans:bean>


    <!-- Beans -->
    <beans:bean id="personService" class="com.journaldev.spring.service.PersonServiceImpl" />
    <beans:bean id="visitService" class="com.journaldev.spring.service.VisitServiceImpl" />


    <beans:bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <beans:property name="dataSource" ref="dataSource"/>
        <beans:property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
        <beans:property name="packagesToScan" value="com.journaldev.spring.*" />
        <beans:property name="jpaProperties">
            <beans:props>
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>  <!-- validate | update | create | create-drop -->
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</beans:prop>
                <!-- <beans:prop key="hibernate.cache.use_query_cache">true</beans:prop> --> 
            </beans:props>
        </beans:property>
    </beans:bean>

    <beans:bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <beans:property name="entityManagerFactory" ref="entityManagerFactory" />
    </beans:bean>

    <beans:bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <beans:property name="basename" value="classpath:messages" />
        <beans:property name="defaultEncoding" value="UTF-8" />
    </beans:bean>

    <beans:bean name="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <beans:property name="validationMessageSource">
           <beans:ref bean="validationMessageSource"/>
        </beans:property>
    </beans:bean>
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>
</beans:beans>

图片: pom.xml


1.7
4.1.9.1发布
1.7.4
1.7.5
5.1.0.1最终版本
1.1.0.1最终版本
5.1.1.最终版本
1.8.1
1.9.2.1发布
org.springframework
SpringWebMVC
${org.springframework版本}
org.springframework
德克萨斯州春季
${org.springframework版本}
org.springframework.data
spring数据jpa
${spring数据jpa版本}
org.hibernate
休眠实体管理器
${hibernate.version}
javax.validation
验证api
${validation api.version}
org.hibernate
休眠验证器
${hibernate validator.version}
公共dbcp
公共dbcp
1.4
org.springframework
春季甲虫
${org.springframework版本}
org.springframework
弹簧试验
${org.springframework版本}
com.mysema.querydsl
querydsl型芯
3.3.2
com.mysema.querydsl
querydsl公寓
3.3.2
com.mysema.querydsl
querydsl jpa
3.3.2
log4j
log4j
1.2.17
运行时
org.jsoup
jsoup
${jsoup version}
com.google.code.findbugs
jsr305
3.0.0
javax.inject
javax.inject
1.
javax.servlet.jsp
jsp api
2.1
假如
javax.servlet
servlet api
2.5
假如
javax.servlet
jstl
1.2
朱尼特
朱尼特
4.12
测试
mysql
mysql连接器java
5.1.37
spring mvc jpa hibernate
org.apache.maven.plugins
maven编译器插件
2.5.1
${java.version}
${java.version}
-Xlint:全部
真的
真的
com.mysema.maven
aptmaven插件
1.1.1
生成源
过程
目标/生成源
com.mysema.query.apt.jpa.JPAAnnotationProcessor

将MessageSource bean id定义为“MessageSource”,并从验证器中将其引用为“MessageSource”

<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <beans:property name="basenames">
       <beans:list>
            <beans:value>classpath:messages</beans:value>
            <beans:value>classpath:ValidationMessages</beans:value>
        </beans:list>        
    </beans:bean>
    <beans:property name="defaultEncoding" value="UTF-8" />
</beans:bean>

似乎有你想要的。虽然我不清楚这个答案。您能在这里描述一下答案吗?试着调试“org.springframework.context.support”包,看看是否加载了*.properties?请参阅关于Hibernate验证的更新答案。对于javax.validation(JSR-303),它将使用消息*.properties。让我看看是否可以将更新的代码发布到GitHub。以下是修改后的源文件。只需抓取并运行一个构建,然后部署。您应该自定义消息。顺便说一句,还修复了日志配置,因为它不工作。阿尔梅罗-非常感谢,现在一切正常。我仍然不确定你是如何解决这个问题的。请你给我引路好吗?国际化将如何在这方面发挥作用?
<properties>
        <java.version>1.7</java.version>
        <org.springframework-version>4.1.9.RELEASE</org.springframework-version>
        <org.aspectj-version>1.7.4</org.aspectj-version>
        <org.slf4j-version>1.7.5</org.slf4j-version>
        <hibernate.version>5.1.0.Final</hibernate.version>
        <validation-api.version>1.1.0.Final</validation-api.version>
        <hibernate-validator.version>5.1.1.Final</hibernate-validator.version>
        <jsoup-version>1.8.1</jsoup-version>
        <spring-data-jpa-version>1.9.2.RELEASE</spring-data-jpa-version>
    </properties>

    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-jpa-version}</version>
        </dependency>


        <!-- Hibernate Entity Manager -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>


        <!-- Validations -->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>${validation-api.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${hibernate-validator.version}</version>
        </dependency>

        <!-- Apache Commons DBCP -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- Spring ORM -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <!-- Querydsl dependencies -->
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-core</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>3.3.2</version>
        </dependency>

        <!-- LOG4J -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>runtime</scope>
        </dependency>


        <!-- Needed for Hibernate Validation -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>${jsoup-version}</version>
        </dependency>

        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <!-- JSP API -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- Servlet API -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <!-- JSTL -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- Junit Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
    </dependencies>

    <!-- Project Build -->
    <build>
        <finalName>spring-mvc-jpa-hibernate</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>


            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.1</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <!-- Specifies the directory in which the query types are generated -->
                            <outputDirectory>target/generated-sources</outputDirectory>
                            <!-- States that the APT code generator should look for JPA annotations -->
                            <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <beans:property name="basenames">
       <beans:list>
            <beans:value>classpath:messages</beans:value>
            <beans:value>classpath:ValidationMessages</beans:value>
        </beans:list>        
    </beans:bean>
    <beans:property name="defaultEncoding" value="UTF-8" />
</beans:bean>
ValidationMessages.properties 

# FirstName
html.validation.firstName=Invalid First Name
#length.validation.firstName=First Name should be 2 to 50 lenght in characters
Length.person.firstname=First Name should be 2 to 50 lenght in characters

# LastName
html.validation.lastName=Invalid Last Name
#length.validation.lastName=Last Name should be 2 to 50 lenght in characters
Length.person.lastname=Last Name should be 2 to 50 lenght in characters

# Country
html.validation.country=Invalid Country Name
#length.validation.country=Country Name should be 2 to 50 lenght in characters
Length.person.country=Country Name should be 2 to 50 lenght in characters

#EmailId
html.validation.emailId=Invalid Email ID
#length.validation.emailId=Email ID length should not be more than 11 characters
Length.person.emailId=Email ID length should not be more than 11 characters 
Pattern.person.emailId=Invalid Email Format