使用 ModelAndView 进行 Spring MVC 验证

2024-01-24

我正在尝试向我的 Spring MVC 应用程序添加验证。在尝试设置验证之前,我一直使用 ModelAndView 来提供 jsp 页面,但错误消息不显示。

Model

@Entity
@Table(name = "employee")
public class Employee {


@Id
@NotEmpty(message = "Please enter your email addresss.")
@Email
private String email;

@NotEmpty
@Pattern(regexp="[a-zA-Z0-9]")
private String password;

@NotEmpty
private String firstName;

@NotEmpty
private String lastName;

@NotEmpty
private String phoneNum;


private boolean assigned;

public Employee() {

}

// getters and setters
}

控制器

@RestController
@RequestMapping("/employee")
public class EmployeeController {

private static final Logger LOGGER = LogManager
        .getLogger(EmployeeController.class.getName());

@Autowired
private EmployeeServiceImpl employeeService;

@RequestMapping(value = "/new", method = RequestMethod.GET)
public ModelAndView getRegisterView(Model m) {
    return new ModelAndView("addEmployee", "employeeForm", new Employee());
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView postUser(@Valid Employee employee, BindingResult result) {
    ModelAndView model;
    if (result.hasErrors()) {
        model = new ModelAndView("addEmployee", "employeeForm", employee);
    } else {
        employeeService.addEmployee(employee);
        model = new ModelAndView();
        model.setViewName("displayEmployee");
        model.addObject("employees", employeeService.getEmployees());
    }

    return model;
}
}

Form

<form:form class="form-horizontal" role="form" method="POST"
        action="register" commandName="employeeForm" modelattribute="employee">
        <div class="form-group">
            <form:label path="firstName"
                class="control-label col-lg-2 col-lg-offset-2 col-md-2 col-md-offset-2 col-sm-12"
                for="fname">First Name:</form:label>
            <div class="col-lg-6 col-md-6 col-sm-12">
                <form:input path="firstName" class="form-control" id="fname"
                    placeholder="First Name" />
                <form:errors path="firstName" />
            </div>
        </div>
        <div class="form-group">
            <form:label path="lastName"
                class="control-label col-lg-2 col-lg-offset-2 col-md-2 col-md-offset-2 col-sm-12"
                for="lname">Last Name:</form:label>
            <div class="col-lg-6 col-md-6 col-sm-12">
                <form:input path="lastName" class="form-control" id="lname"
                    placeholder="Last Name" />
                <form:errors path="lastName" />
            </div>
        </div>
        <div class="form-group">
            <form:label path="email"
                class="control-label col-lg-2 col-lg-offset-2 col-md-2 col-md-offset-2 col-sm-12"
                for="email">Email:</form:label>
            <div class="col-lg-6 col-md-6 col-sm-12">
                <form:input path="email" type="email" class="form-control"
                    id="email" placeholder="Email" />
                <form:errors path="email" cssClass="error" />
            </div>
        </div>
        <div class="form-group">
            <form:label path="phoneNum"
                class="control-label col-lg-2 col-lg-offset-2 col-md-2 col-md-offset-2 col-sm-12"
                for="phoneNum">Phone Number:</form:label>
            <div class="col-lg-6 col-md-6 col-sm-12">
                <form:input path="phoneNum" class="form-control" id="phoneNum"
                    placeholder="Phone Number" />
                <form:errors path="phoneNum" />
            </div>
        </div>
        <div class="form-group">
            <form:label path="password"
                class="control-label col-lg-2 col-lg-offset-2 col-md-2 col-md-offset-2 col-sm-12"
                for="pwd">Password:</form:label>
            <div class="col-lg-6 col-md-6 col-sm-12 controls">
                <form:input path="password" type="password" class="form-control"
                    id="pwd" placeholder="Password" />
                <form:errors path="password" />
            </div>
        </div>
        <div class="form-group form-actions">
            <div
                class="col-lg-offset-4 col-lg-1 col-md-offset-4 col-md-1 col-sm-1">
                <button type="submit" class="btn btn-primary">Register</button>
            </div>
            <div class="col-lg-1 col-md-1 col-sm-1">
                <button type="reset" class="btn btn-primary">Clear</button>
            </div>
        </div>
        <form:hidden path="assigned" value="false" />
    </form:form>

model = new ModelAndView("addEmployee", "employeeForm", employee);

您自己在代码中销毁了模型,因此当返回页面时基本上什么也没有留下。退货时ModelAndViewSpring MVC 假设您已经准备好并添加了自己渲染视图所需的所有内容。

相反添加@ModelAttribute("employeeForm")到你的方法参数旁边@Valid注释并使用现有的模型BindingResult构建一个ModelAndView.

@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView postUser(@Valid @ModelAttribute("employeeForm" Employee employee, BindingResult result) {
    ModelAndView model;
    if (result.hasErrors()) {
        model = new ModelAndView("addEmployee", result.getModel());

虽然这可行,为什么不简单地返回一个String作为视图的名称并做一些Model需要时的准备。

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String postUser(@Valid @ModelAttribute("employeeForm") Employee employee, BindingResult result, Model model) {
    if (result.hasErrors()) {
        return "addEmployee";
    } else {
        employeeService.addEmployee(employee);
        model.addObject("employees", employeeService.getEmployees());
        return "displayEmployee";
    }
}

我什至认为填写Model为了displayEmployee页面不属于此处,而是在为该页面准备模型的单独方法中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ModelAndView 进行 Spring MVC 验证 的相关文章

  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • 使用 Spring MVC 在 jar 文件中显示 jsp 页面

    我正在使用 Spring MVC 3 2 2 在 java 中开发一个 Web 应用程序 我在从 jar 文件中加载 jsp 页面时遇到问题 Spring MVC Web应用程序具有以下结构 META INF WEB INF spring
  • 最小有效 JSON 是多少?

    我仔细阅读了 JSON 描述http json org http json org 但我不确定我是否知道这个简单问题的答案 最小可能的有效 JSON 字符串是什么 string 该字符串是有效的 JSON 吗 42简单的数字是有效的 JSO
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • 在 doxygen 中使用 @see 或 @link

    我之前用 Javadoc 记录并使用了标签 see link or see foo and link foo 在我的描述中链接到其他课程 现在我尝试了doxygen 似乎这些标签不兼容 如果我运行 doxygen 完整的标签将被简单地解释为
  • 如何检查单词是否在wordNet中

    我开始了解wordNet直到我知道我找到了synonymous对于一个特定的词 现在我有一个文件 我想使用标记化该文本n gram例如 String s I like to wear tee shirt 使用后n gram这将是 I lik
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • java彩色滚动条搜索结果

    我将如何在 Java 中自定义滚动条 以便我可以进行像 chrome 一样的搜索 也就是说在结果所在的位置放置彩色条纹 我不想要一个库 因为我更喜欢自己编写代码 另外 我不想失去我拥有的 L F 欢迎举例 实际上 它将查看一个大的文本文件或
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 始终将双精度舍入

    我怎么总是能把一个double to an int 并且永远不要将其四舍五入 我知道Math round double 但我希望它始终向上舍入 所以如果是的话3 2 四舍五入为 4 您可以使用Math ceil method 请参阅Java
  • 为什么要为 id 设置DisallowedFields? -- Spring 宠物诊所示例

    从 Spring API 中 我了解到 InitBinder用于初始化一些绑定规则 在宠物诊所的例子中 为什么我们有setdisallowed id 当id不显示在表单上时 InitBinder public void setAllowed
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • 禁用 HTML 验证。如何为全局每个表单设置“novalidate”?

    我想知道是否可以做一些事情来禁用应用程序中每个表单的 HTML 验证 有什么办法可以做到这一点或者我应该添加novalidate每个表单标签的属性 看来唯一的方法是添加novalidate使用 JavaScript jQuery 为每个表单
  • javadoc 子集/java 库组织

    我自己从来没有运行过javadoc 无论是在命令行还是ant 的 javadoc 任务 http ant apache org manual Tasks javadoc html 我将使用 ant 我需要为我编写的库生成 javadoc 问
  • 在 Eclipse RCP 应用程序中禁用插件贡献

    我经常遇到这个问题 但尚未找到解决方案 每当我编写一个新的基于 Eclipse RCP 的应用程序并包含来自 Eclipse 平台的插件时 我都会 继承 其中一些插件的 UI 贡献 大多数贡献 菜单项 键盘快捷键 属性页 都很有用 但有时我
  • Hybris:如何在impex中导入zip文件中的媒体?

    我知道我们可以导入未像这样压缩的图像 siteResource jar com project initialdata constants ProjectInitialDataConstants projectinitialdata imp
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • junit4 使用特定测试方法创建测试套件

    在 junit4 中 我想执行来自不同类的特定测试方法 即想要使用来自不同类的特定测试方法创建一个测试套件 假设我有两门课 public class Test Login Test public void test Login 001 Sy

随机推荐

  • 在 Android ContentProvider 中连接表和通知 ContentObservers 的最佳实践

    我有一个 ContentProvider 来处理与我的应用程序相关的所有数据插入和检索 我遵循 Virgil Doobjanschi 在 Google I O 上建议的模式 我正在使用第一种模式 我的问题是我有一个由数据库中的多个表表示的逻
  • 动画结束后的 CSS 过渡

    我有一个 css 过渡 可以在悬停时移动元素 还有一个动画 可以在悬停时旋转元素 动画上有一个等于过渡持续时间的延迟 因此在过渡到正确位置后 动画就会开始 它工作得很好 但是 当我们将鼠标移开时 动画会停止 但不会向下过渡 是否可以在鼠标移
  • 从 TypeScript->CommonJS 模块导出带有字体资源的全局样式

    我有一个 TypeScript React 项目 组织如下 tsconfig json package json yarn lock lerna json node modules packages ui library package j
  • 从 rfft2 数组创建 fft2 结果

    我试图通过操作 rfft2 的结果来重新创建完整 fft2 的结果 该文档指出 rfft2 仅计算正系数 因为当输入为实数时 负系数与正系数具有对称性 这对于大型数组非常有用 因为计算 rfft2 比完整的 fft2 快得多 所以下面的代码
  • 如何处理 MySQL 多边形重叠查询?

    例如 我有一个用户表 每个用户都是地图上的一个 正方形 或圆圈 我想找到这样的用户overlap地图上的另一个广场 MySQL 5 6 目前支持此功能吗 MySQL 的开发版本怎么样 请注意 我不是在寻找 查找在该正方形内有一个点的用户 我
  • 小负数四舍五入后保持符号

    即使舍入结果为零 MATLAB 似乎也会记住原始符号 由于小负值已四舍五入为零 因此该信号不再有意义 代码示例 a 0 001 ar round a 2 fprintf a 2f a rounded 2f Zero 2f n a ar 0
  • 将 MILOC 与 Fortran 结合使用:赋值中的等级 0 和 1 不兼容

    给出错误消息的版本 program hello integer a 9 integer index note no dimension here a 1 3 4 5 6 7 8 9 10 index MINLOC a MASK a gt 5
  • 如何知道动画为什么会卡顿?

    我有一些相当简单的动画 移动文本 移动椭圆等 并在全屏 1920x1080 减去任务栏 下运行 WPF Performance Suite 报告整个动画的帧速率约为 50 FPS 脏矩形加法约为 300 矩形 秒 SW 帧在 0 到 4 之
  • 神经网络:连续输出变量的 Sigmoid 激活函数

    好吧 所以我正处于中间Andrew Ng 在 coursera 上的机器学习课程 https www coursera org course ml并希望调整作为作业 4 的一部分完成的神经网络 特别是 我在作业中正确完成的神经网络如下 S
  • 谷歌地图根据窗口调整大小设置不同的缩放

    继我之前的问题之后谷歌地图响应式调整大小 https stackoverflow com questions 18444161 google maps responsive resize我想根据窗口调整大小实现不同的缩放级别 调整大小时 因
  • 在 perl 或 awk 中将每 4 列打印到一行

    您能帮助我如何将每 4 个连续行转换为一个制表符分隔的列吗 convert A 1 2 3 3 3 4 1 to A 1 2 3 3 3 4 1 执行此操作的一个简单方法是使用xargs xargs n4 lt file A 1 2 3 3
  • 使用 dplyr 包中的 group_by 和 mutate 通过 id 变量创建新的因子变量

    我有一个长格式的分层数据框 其中每一行代表关系 其中许多关系可以属于一个人 以下是一个小型示例数据集的代码 df lt data frame id as factor c 1 1 1 2 2 3 4 4 partner c 1 2 3 1
  • 如何获取android.Manifest.permission.MEDIA_CONTENT_CONTROL的android权限

    我正在尝试使用 API21 中的 MediaSessionManager 来控制设备上的音乐播放 对于使用 它说需要持有 android Manifest permission MEDIA CONTENT CONTROL public vo
  • 为什么要为多个平台编译 .NET 代码

    当 e G 创建 Windows Phone 应用程序时 我必须选择 x86 在模拟器中进行调试 并选择 ARM 在手机上进行调试 那当然是因为我的电脑运行的是 x86 具体来说是 x64 但 x64 处理器仅在寄存器长度上有所不同 如果我
  • 如何使用 T-SQL 将两个整数相除得到浮点结果?

    使用 T SQL 和 Microsoft SQL Server 当我在 2 个整数之间进行除法时 我想指定小数位数 例如 select 1 3 目前返回0 我希望它能回来0 33 就像是 select round 1 3 2 但这是行不通的
  • 寻找一种具有尽可能少的比较操作的排序算法

    我想对由人类执行比较的项目进行排序 Pictures 工作项目的优先级 对于这些任务 比较次数是性能的限制因素 需要的最少比较次数是多少 我假设 gt N for N items 哪种算法可以保证这个最小数量 为了回答这个问题 我们需要做出
  • w8 默认平板电脑设置与 WPF 布局冲突

    我有一个 WPF 桌面应用程序 我收到 W8 用户的报告 称我们应用程序中的代码完成窗口未正确对齐 我调查发现它是W8平板电脑设置中的一个设置与wpf中弹出窗口的位置冲突 Default is right handed and then t
  • 一个表可以有两个外键吗?

    我有下表 主键bold 外键输入Italic 顾客表 ID 姓名 平衡 帐户名称 帐户类型 账户类别表 帐户类型 平衡 客户明细表 帐户名称 名字 姓氏 地址 我可以在 Customer 表中有两个外键吗 如何在 MySQL 中实现这一点
  • Yii 高级 url 重写

    注意 ANYTHING ELSE 因此 我有我的控制器和操作 我希望它们能够正常运行 以响应如下示例 for UserContoller with actionList and actionEdit user list user edit
  • 使用 ModelAndView 进行 Spring MVC 验证

    我正在尝试向我的 Spring MVC 应用程序添加验证 在尝试设置验证之前 我一直使用 ModelAndView 来提供 jsp 页面 但错误消息不显示 Model Entity Table name employee public cl