JSTL равен String в валидации Spring - PullRequest
0 голосов
/ 13 января 2020

Я использую свойства, чтобы сделать многоязычное предупреждение об ошибке для проверки (Аннотация и Spring) И я хочу проверить @NotBlank и @Size его, но даже когда я использую

<c:set var="checkusername"><form:errors path="username"/></c:set>
<c:if test="${checkusername == 'username.id'}">
   div class="loi"><s:message code="global.check.username"/></div>
</c:if>
<c:if test="${checkusername == 'username.length'}">
   div class="loi"><s:message code="global.check.usernamelength"/></div>
</c:if>

или

<c:set var="checkusername"><form:errors path="username"/></c:set>
<c:if test="${checkusername eq 'username.id'}">
   div class="loi"><s:message code="global.check.username"/></div>
</c:if>
<c:if test="${checkusername eq 'username.length'}">
   div class="loi"><s:message code="global.check.usernamelength"/></div>
</c:if>

Результат сравнения, он отображает ложь, поэтому он не работает так, как я ожидал проверьте также длину.

Это мой код недвижимости:

global_vi.properties

global.check.username=Không được để username trống
global.check.usernamelength=username nhiều nhất là 50 chữ

global.properties

global.check.username=Do not leave username empty
global.check.usernamelength=Username only contain 50 words

Моя модель Пользователь:

@Entity
@Table(name = "Users")
public class User  {

    @Id
    @Column(name = "username")
    @NotBlank(message = "username.id")
    @Size(min=0,max=50,message="username.length")
    private String username;

    @Column(name = "password")
    @NotBlank(message = "Không được để trống mật khẩu")
    private String password;

    @Column(name = "fullname")
    @NotBlank(message = "Không được để trống họ tên")
    private String fullname;

    public User() {

    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public User(String username, String password, String fullname) {
        this.username = username;
        this.password = password;
        this.fullname = fullname;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getFullname() {
        return fullname;
    }

    public void setFullname(String fullname) {
        this.fullname = fullname;
    }

1 Ответ

0 голосов
/ 13 января 2020

Вы можете отображать сообщения об ошибках нескольких локалей, используя проверку bean-компонента.

Для этого вам нужно немного настроек.

@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource validationMessageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:global");
    ...
    return messageSource;
}

Это приведет к получению сообщений об ошибках из соответствующего файла локали.

@Bean
public LocaleResolver localeResolver(){
    SessionLocaleResolver r = new SessionLocaleResolver();
    r.setDefaultLocale(Locale.US);
    return r;
}

Необходимо зарегистрировать наш LocaleResolver как компонент

@Override
public void addInterceptors (InterceptorRegistry registry) {
    LocaleChangeInterceptor l = new LocaleChangeInterceptor();
    l.setParamName("localeCode");
    registry.addInterceptor(l);
}

Этот перехватчик может изменять текущую локаль базового LocaleResolver при каждом запросе, только если указанный параметр запроса ( установленное LocaleChangeInterceptor.setParamName(..)) присутствует в HTTP-запросе.

и

...
@NotBlank(message = "{global.check.username}")
@Size(min=0,max=50,message="{global.check.usernamelength}")
private String username;

@NotBlank(message = "{global.check.username}")
private String password;
...
...