java - 验证 Spring 服务层

标签 java spring jsp validation service

我有一个通过实现 Spring Validator 接口(interface)来验证的表单。 验证只涉及我表单中的字段。我对此没有问题,但我想做但我不知道如何进行的是在我的 Controller 中调用一个服务方法,如果此方法返回特定值,则返回到表单页面并显示jsp页面中的错误信息。

validator :

public class TrunkValidator implements Validator{

@Override
public boolean supports(Class<?> clazz) {
    return Trunk.class.equals(clazz);
}

public void validate(Object obj, Errors errors) {
    Trunk trunk = (Trunk) obj;

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "compagnyName", "field.required", "Nom emtreprise est obligatoire");

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "pbxName", "field.required", "Nom Pbx est obligatoire");


    if ( ! errors.hasFieldErrors("compagnyName")) {
        if ("trunk".equals(trunk.getCompagnyName()))
            errors.rejectValue("compagnyName", "sssss", "déja existant");
    }       
    }
}

Controller :

@RequestMapping(value = "/createTrunk", method = RequestMethod.POST)
    protected ModelAndView createTrunk(@Valid Trunk trunk,
            BindingResult bindingResult) {
                // form validation
        if (bindingResult.hasErrors()) {
            ModelAndView model = new ModelAndView("/jsp/createTrunk.jsp");
            model.addObject(ATTRIBUTE_BASE_URL, baseUrl);
            return model;
        } else {

                   //  if service method retun error message or exception
                   // display form with error message 

        }
    }

JSP:

<form:form method="POST" commandName="trunk" action="${baseUrl}/createTrunk">
    <form:errors path="*" cssClass="errorblock" element="div" />
    <table>
        <tr>
            <td>Nom de l'entreprise :</td>
            <td><form:input path="compagnyName" /></td>
            <td><form:errors path="compagnyName" cssClass="error" /></td>
        </tr>
        <tr>
            <td>Nom de PBX :</td>
            <td><form:input path="pbxName" /></td>
            <td><form:errors path="pbxName" cssClass="error" /></td>
        </tr>

        <tr>
            <td>N° de commande :</td>
            <td><form:input path="orderNum" /></td>
            <td><form:errors path="orderNum" cssClass="error" /></td>
        </tr>



        <tr>
            <td>LDI :</td>
            <td><form:input path="ldi" /></td>
            <td><form:errors path="ldi" cssClass="error" /></td>
        </tr>

        <tr>
            <td>INSEE :</td>
            <td><form:input path="insee" /></td>
            <td><form:errors path="insee" cssClass="error" /></td>
        </tr>

最佳答案

在你的 Controller 中添加一个@InitBinder:

@InitBinder("trunk")
public void initBinderAll(WebDataBinder binder) {
        binder.setValidator(new TrunkValidator());
}

关于java - 验证 Spring 服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20515664/

相关文章:

spring - 从轴突聚合调用第三方服务是个好主意吗

java - Spring MVC - 获取错误的消息包

java - 只打印数组中 3 的倍数

java - JWT token 问题

java - 在基于注释的 Spring Web 应用程序中将请求发送到 Controller 之前拦截请求

java - 带有 BindingResult 的 Spring 4 @Validation 注释不起作用

java - 如果用户关闭浏览器,如何自动结束 session

jsp - 如何维护Tomcat的用户基本认证?

java - 无法覆盖catch block 代码覆盖率

java - 将 JPG 转换为具有背景透明度的 PNG