You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JakartaEE 10 MVC中@FormParam参数验证未触发如何解决?

问题:Jakarta MVC(Eclipse Krazo)表单验证不触发

项目背景

我有一个包含HTML页面和控制器类的Java Web项目(存在设置资源路径为/resources的REST配置类,但与问题无关)。

HTML页面代码

<html>
    <head>
        <title>Start Page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Hello World!</h1>
        <form action="resources/postman" method="POST">
            <label for="ageInput">Age:</label>
            <input type="number" id="ageInput" name="age"/><br/><br/>
            <input type="submit" value="Submit"/>
        </form> 
    </body>
</html>

初始控制器代码

@Controller
@Path("postman")
public class PostController {
    @MvcBinding
    @FormParam("age")
    @Min(18)
    private int age;
    @Inject
    private BindingResult bindingResult;
    @Inject
    private Models models;
    @POST
    public String processForm() {
        if (bindingResult.isFailed()) {
            models.put("errors", bindingResult.getAllMessages());
            return "fail.jsp";
        }
        return "success.jsp";
        
    }
}

问题现象

无论在ageInput中输入负数或小于18的正数,验证始终未触发,请求总是跳转到success.jsp。使用Eclipse Krazo作为Jakarta MVC API的实现,如何正确触发验证?

解决方法

经测试,必须添加@Valid注解才能触发参数验证,修改后的控制器方法如下,可正常实现年龄校验:

@POST
public String processForm(
    @Valid 
    @FormParam("age") 
    @Min(18) 
    @MvcBinding 
    int age) {
        if (bindingResult.isFailed()) {
            return "fail.jsp";
        }
        return "success.jsp";        
}

内容的提问来源于stack exchange,提问作者zajer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:50:12