调用两种方法在Java中返回不同的页面

时间:2015-10-27 10:03:16

标签: java spring validation if-statement

我有一种方法来检查用户输入是否正确,作为卡信息&返回错误消息的方法(服务器端)。

如果所有信息都正确,我想要返回付款成功页面。 如果用户输入与电子表格中的卡信息不匹配,则返回付款失败页面。 <<目前我的程序可以做到这一点。

如果用户留空字段即卡号,我希望它返回带有验证消息的同一页面。

@RequestMapping(value = "/payment-submission", method = RequestMethod.POST)
public String handlePaymentSubmission(@ModelAttribute PaymentDetails paymentDetails, BindingResult resulttwo) {

if (payService.isPaymentDetailsCorrect(paymentDetails)) {
    return PAYMENT_SUCCESSFUL;
}

return PAYMENT_FAILED;

这是我现有的代码。

我不知道如何调用下面的方法来检查上面的验证,以确保它返回正确的页面。

private void validatePaymentDetails(final PaymentDetails paymentDetails, final BindingResult resulttwo) {

    if (StringUtils.isBlank(paymentDetails.getCardNumber())) {
        resulttwo.addError(new FieldError("paymentDetails", "cardNumber",
            "validate.payment-details-cardnumber.empty.message"));
        return;
    }
}

正如之前的帖子中提到的,我是新手并且学习JAVA,如果这令人困惑或不正确,那么道歉。

感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

使用spring验证器框架,您可以实现此目的。

1)创建自定义验证器&实现Validator类,如下所示。

import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

@Component
public class PaymentValidator implements Validator{

@Override
public boolean supports(Class<?> paramClass) {

    return PaymentDetails.class.equals(paramClass);
}

@Override
public void validate(Object arg0, Errors errors) {
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "cardNumber", "error.cardNumber" , "Please give valid cardnumber");
}

}

2)在控制器中,调用此验证方法并按以下方式处理。

@RequestMapping(value = "/payment-submission", method = RequestMethod.POST)
public String handlePaymentSubmission(@ModelAttribute PaymentDetails paymentDetails, BindingResult result) {

    paymentValidator.validate(paymentDetails, result);

    if( ! result.hasErrors()) {
    return PAYMENT_SUCCESSFUL;

    }

    return INPUT_PAGE;
}

3)在您的jsp页面中,将以下元素添加到您要显示消息的位置

<form:errors path="cardNumber" cssStyle="color: #ff0000;"/>