2017-05-05 3 views
0

Wenn ich versuche, die Federvalidierung zu verwenden, wird die Fehlermeldung nicht angezeigt. Könntest du damit helfen?Federvalidierungsfehlermeldung wird nicht angezeigt

Mein jsp:

<form:form method="POST" modelAttribute="userInfo">  

       <form:label path="redirectURL">Hybris URL</form:label>: 
       <form:input path="redirectURL" placeholder="请填写Hybris管理平台地址" /> 
       <form:errors path="redirectURL" class="error" /><br /> 

       <form:label path="email" >Last Name</form:label>: 
       <form:input path="email" placeholder="请填写邮箱地址" /> 
       <form:errors path="email" class="error" /><br/> 

      <form:input type="hidden" path="taobaoUserId" value= "${taobaouserid}" /> 
      <input type="submit" class="button" value="提交" style="margin-right: 15px;" /> 

Mein Validator:

import javax.annotation.Resource; 

import org.apache.commons.validator.EmailValidator; 
import org.apache.commons.validator.UrlValidator; 
import org.springframework.stereotype.Component; 
import org.springframework.validation.Errors; 
import org.springframework.validation.ValidationUtils; 
import org.springframework.validation.Validator; 

import com.hybris.integration.model.UserInfo; 

@Component 
public class UserInfoValidator implements Validator { 

EmailValidator emailvalidator = EmailValidator.getInstance(); 

@Override 
public boolean supports(Class<?> arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public void validate(Object target, Errors errors) { 

    UserInfo userInfo = (UserInfo) target; 

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "redirectURL", 
      "NotEmpty.userInfoForm.redirectURL"); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "NotEmpty.userInfoForm.email", "Input info is wrong"); 

    if (!emailvalidator.isValid(userInfo.getEmail())) { 
     errors.rejectValue("email", "Pattern.userInfoForm.email","Input info is wrong"); 
    } 

    if (!userInfo.getRedirectURL().startsWith("http")) { 
     errors.rejectValue("redirectURL", "StartWithHttp.userInfoForm.url","Input info is wrong"); 
    } 

    if(validateUrl(userInfo.getRedirectURL())){ 
     errors.rejectValue("redirectURL", "StartWithHttp.userInfoForm.url","Input info is wrong"); 
    } 
} 

private boolean validateUrl(String url) { 
    String[] schemes = { "http", "https" }; 
    UrlValidator urlValidator = new UrlValidator(schemes); 
    return urlValidator.isValid(url); 
} 

}

Mein Controller:

@RequestMapping(value = "redirecttohybris", method = RequestMethod.POST) 
public String redirectToInput(Model model,@ModelAttribute("userInfo") 
UserInfo userInfo, BindingResult result) 
{ 

    userInfoValidator.validate(userInfo, result); 
    LOGGER.info(userInfo.getTaobaoUserId().toString()); 
    if (result.hasErrors()) { 
     model.addAttribute("userInfo", new UserInfo()); 
     return "redirectInfo"; 
    } 

    return "redirect:" + userInfo.getRedirectURL(); 
} 

Wenn ich debuggen, kann ich den Fehler in Verbindung stehendes Info sehen in "Ergebnis" in der Steuerung ler. Die Nachricht wird jedoch nicht im Frontend angezeigt. Ich denke, es gibt ein Problem. Kann mir jemand helfen?

+0

Weil Sie Umleitung .... Models nicht überleben eine Umleitung. –

+0

Ich umleitung nur wenn es keinen fehler gibt. Wenn ein Fehler gefunden wurde, geben Sie einfach einen Seitennamen zurück. – molly

+0

Verpasst das. Entfernen Sie das Attribut "Model". Das 'BindingResult' wird für das Modell verwendet und Sie müssen die' userInfo' nicht neu zuweisen, da diese bereits Teil des Modells ist. –

Antwort

0

Sie müssen das Befehlsobjekt userInfo nicht neu zuweisen, wenn ein Fehler auftritt. Sie müssen nur Ihre Ansicht zurückgeben.

Ersetzen userInfo durch eine neue UserInfo Sie löschen Fehlerinformationen.

Versuchen mit diesem:

// ... 

if (result.hasErrors()) { 
    return "redirectInfo"; 
} 

// ... 
+0

Es löst mein Problem. Vielen Dank! – molly