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/

相关文章:

java - 从 IntentService 更新 ui 的最佳方式?

java - JPA 关系实体在数据库上更新,但不在现场更新

java - 谷歌云平台 : cannot access Pubsub from Container Engine

java - 在spring中将数据从jsp表单发送到数据库(不使用servlet)

java - 如何修复通过apache POI上传xlsx文件时的AbstractMethodError

java - 学习 Java EE 及相关技术的路线?

java - 主体参数不能与表单参数一起使用 - 具有 Headers 和 json 数据的 Feign 客户端

java - Freemarker 通过 Java 设置 checkTemplateLocation

java - 如何将多个参数从 thymeleaf html 传递到 thymeleaf 方言处理器

Spring Boot Whitelabel 错误页面几乎无处不在