Я создал аннотацию проверки пользовательской формы, чтобы проверить, соответствует ли дата, заполненная формой, в формате dd/MM/yyyy. К сожалению, это не работает, проверка не выполняется с любым форматом даты, который я пытаюсь выполнить. Первоначально я думал, что проблема заключается в регулярном выражении, которое я использую для тестирования, но после выполнения некоторых тестов я уверен, что он работает.аннотация не поддерживается
Что мне не хватает? Вот мой код (я копирую только соответствующие части), пожалуйста, помогите мне понять, что я сделал не так:
боб Articolo (NB: этот класс вложен в модели класса NewEditArticle, ниже)
@Entity
@Table (name="Articolo")
public class Articolo {
@Column (name="Data")
@Temporal (TemporalType.DATE) //match the data type used in DB
@IsValidDate //check date format is dd/MM/yyyy (custom validator)
private Date data;
класс IsValidDate
@Documented //mandatory
@Constraint (validatedBy= DateValidator.class) //this class contains the validation logic
@Retention (RetentionPolicy.RUNTIME) //mandatory
public @interface IsValidDate {
//error message
String message() default "Please insert date in format dd/mm/yyyy";
Class <?>[] groups() default {}; //mandatory
Class <? extends Payload> [] payload() default {}; //mandatory
}
класс DateValidator
public class DateValidator implements ConstraintValidator <IsValidDate, Date > {
@Override
public void initialize(IsValidDate isValidDate) {
// TODO Auto-generated method stub
}
@Override
public boolean isValid(Date data, ConstraintValidatorContext ctx) {
//convert Date data to String
String dateString=data.toString();
//format dd/MM/yyyy
String regex="(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)";
if (dateString.matches(regex)){
return true;
}
//if date doesn't match regex, return error message from IsValidDate
else {
return false;
}
}
}
модель класса
public class NewEditArticolo {
//ATTRIBUTES
@Valid //requested to trigger validation of bean Articolo
private Articolo articolo;
private List<Area> ListaArea;
private List<Cucina> ListaCucina;
private List<Prezzo> ListaPrezzo;
private List<Voto> ListaVoto;
private List<String> ListaImg;
//METHODS
//CONSTRUCTOR
//create article model without ID number
//used in controller POST method
public NewEditArticolo() {
populateLists();
}
//create Article model based on ID number
//if ID=0 (new Article), creates empty model
//used in controller GET method
public NewEditArticolo(int ID) throws SQLException {
// call DAOArticolo.select only if article already exists
if (ID != 0) {
DAOArticolo DAOart = new DAOArticolo();
articolo = DAOart.select(ID);
}
populateLists();
}
Контроллер
public String editArticle (Model model,
@Valid @ModelAttribute (value="nea") NewEditArticolo nea, //create NewEditArticolo object, autowire attributes from ArticleManager.jsp, add to model and validate
BindingResult result, //collect validation errors
@RequestParam (value="submit") String submit){ //get input value from ArticleManager.jsp
Articolo articolo1=nea.getArticolo();
DAOArticolo daoArt = new DAOArticolo();
//if validation fails, return form to display validation errors
if (result.hasErrors()) {
System.out.println("VALIDATION FAILED");
return "ArticleManager";
}
else {
System.out.println("VALIDATION WAS SUCCESFULL");
}
весна-диспетчерская-servlet.xml
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
У вас на самом деле есть реализация проверки валиков на вашем пути к классу ... Без этого ничего не произойдет. –
Вы решили свою проблему? –
Не совсем, я не уверен, что вы имеете в виду с реализацией проверки фасоли ... не могли бы вы объяснить больше? –