- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 JSP 中使用 Spring 和 Hibernate(使用 SimpleFormController
)在 HibernateValidator
的帮助下验证一个简单的表单。如上所述 here 。仅包含一个字段的表单如下。
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<form:form method="post" id="userForm" name="userForm" action="Temp.htm" commandName="validationForm">
<table>
<tr>
<td>User Name:<font color="red"><form:errors path="userName" /></font></td>
</tr>
<tr>
<td><form:input path="userName" /></td>
</tr>
<tr>
<td><input type="submit" value="Submit" /></td>
</tr>
</table>
</form:form>
以下是定义验证标准的命令类。
package validators;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
final public class ValidationForm
{
@NotEmpty(message="Must not be left blank.")
@Size(min = 1, max = 2)
private String userName;
public void setUserName(String userName)
{
this.userName = userName;
}
public String getUserName()
{
return userName;
}
}
以下是dispatchar-servlet.xml
可以进行不同配置的文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<bean id="tempService" class="usebeans.TempServiceImpl" />
<bean id="tempController" class="controller.Temp" p:tempService-ref="tempService" p:formView="Temp" p:successView="Temp"/>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages" />
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index.htm">indexController</prop>
<prop key="Temp.htm">tempController</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
哪里TempService
是一个仅包含一个方法的接口(interface) add(ValidationForm validationForm){...}
和 TempServiceImpl
是一个实现 TempService
的类界面。
Controller 类Temp
如下。
package controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import usebeans.TempService;
import validators.ValidationForm;
@SuppressWarnings("deprecation")
final public class Temp extends SimpleFormController
{
private TempService tempService=null;
public Temp()
{
setCommandClass(ValidationForm.class);
setCommandName("validationForm");
}
//This method may not be necessary.
public void setTempService(TempService tempService)
{
this.tempService = tempService;
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("validationForm") @Valid Object command, BindException errors) throws Exception
{
ValidationForm validationForm=(ValidationForm) command;
tempService.add(validationForm); //May not be necessary.
if(errors.hasErrors()) //Never evaluates to true even though the text box on the form is left blank.
{
System.out.println("User Name : "+validationForm.getUserName());
//Or do something.
}
else
{
//Do some stuff such as database operations like insert, update or delete.
}
ModelAndView mv=new ModelAndView("Temp", "validationForm", validationForm);
return mv;
}
@Override
protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception
{
ModelAndView mv=new ModelAndView("Temp", "validationForm", new ValidationForm());
return mv;
}
}
现在,这里发生的情况是,当单击表单上唯一的提交按钮提交表单时,onSubmit()
Controller 类中的方法Temp
被调用,我在其中强加 if
状况if(errors.hasErrors()){}
。
因此,如果表单上唯一的 TextField 为空,则正在呈现的表单包含验证错误,并且 if
条件应评估为 true 并且应显示指定的错误消息(如 ValidationForm
类 @NotEmpty(message="Must not be left blank.")
中指定),但这永远不会发生 [ValidationForm
的对象可通过 Object command
获取onSubmit()
的参数方法]。无论文本框是否包含值,条件都不会计算为 true。
我在这里缺少什么?我觉得我遵循了错误的使用方式 HibernateValidator
。任何提示或指南都会对我有帮助。
[应用程序运行时没有错误,但未验证要验证的表单]
最佳答案
将 @Valid 放在方法参数上不适用于从 CommandController
扩展的老式 Controller 。及其子项(例如 SimpleFormController
)。这是AnnotationMethodHandlerAdapter
的一个功能。 ,因此您需要使用带注释的 Controller 才能使其工作。
(您必须抑制该类的弃用警告是有原因的!:) )
读者摘要版本:
不要定义自己的 urlMapping 和调度程序中的所有内容,而是使用 <mvc:annotation-driven/>
然后,您不必从 SimpleFormController 扩展,只需创建一个常规类并使用 @Controller 对其进行注释,并使用 @RequestMapping 对您的方法进行注释。
@Controller
@RequestMapping("/Temp.htm")
public class Temp {
@RequestMapping(method=RequestMethod.GET)
public ModelAndView getForm() {
ModelAndView mv=new ModelAndView("Temp", "validationForm", new ValidationForm());
return mv;
}
@RequestMapping(method=RequestMethod.POST)
public ModelAndView postForm(@Valid ValidationForm validationForm, BindingResult errors) {
tempService.add(validationForm); //May not be necessary.
if(errors.hasErrors()) //Never evaluates to true even though the text box on the form is left blank.
{
System.out.println("User Name : "+validationForm.getUserName());
//Or do something.
}
else
{
//Do some stuff such as database operations like insert, update or delete.
}
ModelAndView mv=new ModelAndView("Temp", "validationForm", validationForm);
return mv;
}
互联网上有大量教程,其内容比我在这里可以复制的要多。查看当前版本的 Spring PetClinic 示例应用程序以获取详细示例。
关于java - 在 JSP 中验证表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276760/
我在 mongodb 中的玩家和锦标赛之间存在多对多关系。 我希望能够一次将许多玩家添加到锦标赛中。如果没有 ajax,这很简单,但我们有一个包含数千名玩家的数据库,因此表单选择变得巨大。 我们想为此
这个问题已经有答案了: When should I use html's and when spring's in Spring MVC web app? (3 个回答) 已关闭 6 年前。 我正
我正在 C++ Builder XE4 上使用 VCL。 我有以下组件。 FormMain 具有 TButton *B_select; FormSelect(或DialogSelect)具有 TCom
如何在不影响表单控件的情况下更改表单的 alphablend? 德尔福XE7 最佳答案 此问题的一个解决方案是使用多设备应用程序(如果无法使用VCL)。 如果您需要保留透明的TForm,只需更改属性T
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在尝试扩展 Django 注册以包含我自己的注册表单。原则上这是相当简单的。我只需要编写自己的表单( CustomRegistrationForm ),它是原始表单( RegistrationFo
我正在尝试为我的网站实现聊天功能。为了做到这一点,我遵循了以下教程:https://channels.readthedocs.io/en/latest/tutorial/ 然后我稍微更改了代码以实现它
有一个问题,我需要用一个 html 表单提交两个相互关联的模型表单。我知道如何提交两个单独的表格,但是在相关模型表格的情况下外键让我发疯。 问题是,第二个表单应该用外键填充字段到第一个表单的实例。 在
我正在创建一个工具,允许某人输入食谱,然后将其保存为 XML 文件,我已经创建了 XSD,但我想知道如何在我的网页上制作一个表单以允许用户输入他们的食谱并遵守模式。我一直在研究 Ajax 和 Jque
在 .net win 表单(如 asp.net web 表单)中是否有可用的验证控件? 因为很难为我的每个控件设置正确的条件,所以我的表单中也有很多重复的代码。 正确的做法是什么? 最佳答案 看看这个
我有一个简短的问题。我正在学习如何使用 javascript 制作注册表,发现此链接非常有用。 http://www.w3resource.com/javascript/form/javascript
我正在开发一个项目,该项目将使用循环将许多表单添加到 mysql 数据库中。在 javascript 部分中,我无法让 var i 在函数 updatesum() 中工作。有人可以帮我吗? 我试图避免
在我的应用程序上有一个包含 2 个字段和一个保存按钮的表单。 在我的 onClick 结束时我需要什么来将光标返回到第一个字段。 我有这个来清除它们 txtData.setText("
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
<input type="text" name="textfield" onKeyPress="javascript:alert(event.
我正在构建的网站有一个登录表单,作为所有其他模板扩展的 base.html 模板的一部分;因此,我需要以某种方式处理每个页面上的登录/注销逻辑。 目前每个页面都在单独的 View 中加载,那么实现它的
我有一个表单类,看起来像.. #forms.py class ExampleForm(forms.Form): color = forms.CharField(max_length=25)
有没有办法在表单定义中给表单一个特殊的错误渲染函数?在 customizing-the-error-list-format 下的文档中它展示了如何为表单提供特殊的错误呈现函数,但似乎您必须在实例化表单
我正在处理由多个页面组成的表单,我想解决验证问题。 当我点击提交按钮时,当前页面上的所有字段都会在下方显示错误消息,但是如果我更改页面,那么我需要再次点击提交,因为这些字段未设置为已触摸。 如果我可以
是否可以附加到继承表单的 exclude 或 widgets 变量? 到目前为止,我有以下设置。 class AddPropertyForm(forms.ModelForm): num_mon
我是一名优秀的程序员,十分优秀!