هل هناك أي تكوين ضروري لاستخدام الرسائل المخصصة للتحقق من صحة السبات

StackOverflow https://stackoverflow.com/questions/4619056

سؤال

أنا أستخدم الفصل التالي للتحقق من صحة الفاصولي مع التحقق من صحة السبات. إنه يعمل بشكل رائع. إنه في الأساس الذي وجده المستمع هنا بالنسبة إلى JPA 1 ، تم تحويله لاستخدامه للتحقق من صحة الفاصوليا في وحدات تحكم الربيع. أحاول تخصيص الرسائل التي تم إرجاعها. هذه وكل مورد آخر يمكنني العثور عليه يقول فقط وضع التحقق من الصحة. يتم تضمين هذا الملف أيضًا أدناه. هذا لا يعمل. أي اقتراحات؟

public class BeanValidationTool {

    public void validate(Object entity) {
        TraversableResolver tr = new MyTraversableResolver();
        Validator validator = Validation.buildDefaultValidatorFactory().usingContext().traversableResolver(tr).getValidator();
        final Set<ConstraintViolation<Object>> constraintViolations = validator.validate(entity);
        if (constraintViolations.size() > 0) {
          Set<ConstraintViolation<?>> propagatedViolations = new HashSet<ConstraintViolation<?>>(constraintViolations.size());
          Set<String> classNames = new HashSet<String>();
            for (ConstraintViolation<?> violation : constraintViolations) {
              propagatedViolations.add(violation);
              classNames.add(violation.getLeafBean().getClass().getName());
            }
            StringBuilder builder = new StringBuilder();
            builder.append("validation failed for classes ");
            builder.append(classNames);
            throw new ConstraintViolationException(builder.toString(), propagatedViolations);
        }
    }

    public class MyTraversableResolver  implements TraversableResolver {

        public boolean isReachable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
            return traversableObject == null || Hibernate.isInitialized(traversableObject);
        }

        public boolean isCascadable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
            return true;
        }
    }
  }`

التحقق من الصحة

validator.min = must be greater than or equal to {value}

validator.notEmpty = This field can't be empty
هل كانت مفيدة؟

المحلول

يجب عليك تحديد Messagesource في سياق التطبيق الخاص بك:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
      scope="singleton" lazy-init="default">
    <property name="basename" value="ValidationMessages"/>
</bean>

أكثر من استخدام الفول لاسترداد الرسائل:

@Autowired
private MessageSource messageSource;

public String getMessage(String messageName) {
    return messageSource.getMessage(messageName, null, null);
}

من أجل الوصول إلى الفاصوليا في السياق ، سيتعين عليك القيام بذلك أيضًا:

@Component
public class BeanValidationTool{...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top