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?
Weil Sie Umleitung .... Models nicht überleben eine Umleitung. –
Ich umleitung nur wenn es keinen fehler gibt. Wenn ein Fehler gefunden wurde, geben Sie einfach einen Seitennamen zurück. – molly
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. –