Действительно ли обязательно указывать идентификатор компонента - PullRequest
0 голосов
/ 04 марта 2019

Я думал, что именование бина с идентификатором не обязательно, пока я не застрял здесь.

dispatcher-servlet.xml

<mvc:annotation-driven />
<context:annotation-config />

<context:component-scan
    base-package="com.springMVC.*"></context:component-scan>
<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/Views/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename">
    <value>/WEB-INF/messagekeys</value>
    </property>
</bean>

messagekeys.properties

NotEmpty.user1.name = UserName cannot be empty
Size.user1.name = Name should have a length between 6 and 16
Pattern.user1.name = Name should not contain numeric value
Min.user1.age = Age cannot be less than 12
Max.user1.age = Age cannot be more than 60
NotNull.user1.age = Please enter your age
NotEmpty.user1.email = email cannot be left blank
Email.user1.email = email is not valid
NotEmpty.user1.country = Enter valid country

User.java

package com.springMVC.model;

import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("request")
public class User {

@NotEmpty
@Size(min=6,max=16)
@Pattern(regexp = "[^0-9]+")
private String name;
@Min(value=12)
@Max(value=60)
@NotNull
private Integer age;
@NotEmpty
@Email
private String email;
@NotEmpty
private String country;
public void setName(String name) {
    this.name = name;
}
public void setAge(Integer age) {
    this.age = age;
}
public void setEmail(String email) {
    this.email = email;
}
public void setCountry(String country) {
    this.country = country;
}
public String getName() {
    return name;
}
public Integer getAge() {
    return age;
}
public String getEmail() {
    return email;
}
public String getCountry() {
    return country;
}
}

Когда я использую бин InternalResourceViewResolver без бина id, он отлично работает.

Но когда я использую бин ReloadableResourceBundleMessageSource без идентификатора компонента не выводит сообщения об ошибках от messages.properties

Когда я даю ReloadableResourceBundleMessageSource компоненту id, он отлично работает.

Итак, мой вопрос Обязательно ли присваивать имя бину с идентификатором?

Заранее спасибо:)

1 Ответ

0 голосов
/ 04 марта 2019

Да для ресурса сообщения

Когда загружается ApplicationContext, он автоматически выполняет поиск bean-компонента MessageSource, определенного в контексте. Боб должен иметь имя messageSource .Если такой компонент найден, все вызовы предыдущих методов делегируются источнику сообщений.Если источник сообщения не найден, ApplicationContext пытается найти родителя, содержащего компонент с тем же именем.Если это так, он использует этот компонент в качестве источника сообщений.Если ApplicationContext не может найти источник сообщений, создается пустой экземпляр DelegatingMessageSource, чтобы можно было принимать вызовы для методов, определенных выше.

проверьте здесь документация

...