Spring环境下无JS实现JSP表单客户端验证及数据库入库问题
解决Spring
<form:input>标签的客户端验证问题 我之前也遇到过类似的困扰,其实Spring的<form:input>标签完全兼容原生HTML的验证属性,你只需要调整一下写法就能复用原来的正则验证逻辑,而且完全符合你不使用Maven和JavaScript的要求。
1. 直接在<form:input>中添加pattern属性
Spring表单标签允许直接添加原生HTML属性,只需要把属性名和值直接写在标签里即可。注意HTML5的pattern属性不需要正则字面量的前后斜杠(你之前写的/^...$/里的斜杠是JavaScript正则的写法,HTML的pattern只需要正则文本本身)。
示例代码如下:
<form:form modelAttribute="user" action="submitForm" method="post"> <label for="uid">登录ID:</label> <form:input path="uid" pattern="^[A-Za-z0-9]+(?:[_][A-Za-z0-9]+)*$" required="true" /> <input type="submit" value="提交" /> </form:form>
渲染后会生成普通的HTML <input>标签,自带pattern和required属性,客户端验证逻辑和你之前用纯JSP/Servlet时完全一致。
2. 补充:服务器端验证(更安全)
客户端验证可以被绕过,所以建议同时结合Spring的服务器端验证,不需要额外依赖(不用Maven,直接用Spring核心包即可):
步骤1:在实体类字段上添加@Pattern注解
public class User { // 用正则表达式约束登录ID格式 @Pattern(regexp = "^[A-Za-z0-9]+(?:[_][A-Za-z0-9]+)*$", message = "登录ID只能包含字母、数字和下划线,且不能以下划线开头或结尾") private String uid; // 其他字段、getter和setter方法 }
步骤2:在Controller中启用验证
@RequestMapping(value = "/submitForm", method = RequestMethod.POST) public String submitForm(@Valid @ModelAttribute("user") User user, BindingResult result) { if (result.hasErrors()) { // 验证失败,返回表单页面 return "formPage"; } // 验证通过,执行数据库录入逻辑 // ... return "successPage"; }
步骤3:在JSP中显示错误信息
<form:form modelAttribute="user" action="submitForm" method="post"> <label for="uid">登录ID:</label> <form:input path="uid" pattern="^[A-Za-z0-9]+(?:[_][A-Za-z0-9]+)*$" required="true" /> <!-- 显示服务器端验证错误 --> <form:errors path="uid" cssClass="error" /> <input type="submit" value="提交" /> </form:form>
这样客户端和服务器端双重验证,既保留了原来的客户端验证体验,又保证了数据的安全性。
内容的提问来源于stack exchange,提问作者user8029928
相关产品推荐
相关产品推荐

