最近看到夏昕《Spring开发指南》的“输入验证与数据绑定”一节。相关代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--Definition of View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/WEB-INF/view/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<!-- 输入验证与数据绑定 -->
<bean id="RegisterValidator" class="net.xiaxin.validator.RegisterValidator"/>
<bean id="RegisterAction" class="net.xiaxin.action.RegisterAction">
<property name="commandClass">
<value>net.xiaxin.reqbean.RegisterInfo</value>
</property>
<property name="validator">
<ref local="RegisterValidator"/>
</property>
<property name="formView">
<value>register</value>
</property>
<property name="successView">
<value>RegisterSuccess</value>
</property>
</bean>
<!--Request Mapping -->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/register.do">RegisterAction</prop>
</props>
</property>
</bean>
<!---Action Definition-->
<bean id="LoginAction" class="net.xiaxin.action.LoginAction">
<!--
<property name="sessionForm"><value>true</value></property>
<property name="commandName"><value>LoginInfo</value></property>
-->
<property name="commandClass">
<value>net.xiaxin.action.LoginInfo</value>
</property>
<property name="fail_view">
<value>loginfail</value>
</property>
<property name="success_view">
<value>main</value>
</property>
</bean>
</beans>
///////////////////////////////////////////////////////////////////////////////////////
package net.xiaxin.validator;
import net.xiaxin.reqbean.RegisterInfo;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class RegisterValidator implements Validator {
public boolean supports(Class clazz) {
return RegisterInfo.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors errors) {
RegisterInfo regInfo = (RegisterInfo) obj;
// 检查注册用户名是否合法
if (regInfo.getUsername().length() < 4) {
//rejectVlaue(Error Code, Message Key, Error Argument, Default Message);
errors.rejectValue("username","less4chars",null,"用户名长度必须大于等于4个字母!");
}
/*检查用户名是否已经存在
if (UserDAO.getUser(regInfo.getUsername()) != null) {
errors.rejectValue("username",
"existed",
null,
"用户已存在!");
}
*/
if (regInfo.getPassword1().length() < 6) {
errors.rejectValue("password1","less6chars",null,"密码长度必须大于等于6个字母");
}
if (!regInfo.getPassword2().equals(regInfo.getPassword1()))
{
errors.rejectValue("password2","notsame",null,"两次输入的密码不一致!");
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package net.xiaxin.reqbean;
public class RegisterInfo {
private String username;
private String password1;
private String password2;
public String getPassword1() {
return password1;
}
public void setPassword1(String password) {
this.password1 = password;
}
public String getPassword2() {
return password2;
}
public void setPassword2(String password) {
this.password2 = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
启动Tomcat, 直接访问URL:http://localhost:8080/springtest/register.do,出现报错界面,出错代码如下:
java.lang.NullPointerException
net.xiaxin.validator.RegisterValidator.validate(RegisterValidator.java:18)
RegisterValidator.java的第18行为:if (regInfo.getUsername().length() < 4) {
教程上说必须通过“…/register.do”访问注册界面,先通过SPRING完成一系列的初始化工作(如创建对应的状态对象并与之关联)之后,register.jsp才能顺利执行,否则我们会得到一个应用服务器内部错误。
可是如果最先访问register.do的话,register.jsp还没出现,当然里面的username,password1,password2为null了。这就有点互相矛盾了。是不是要在RegisterInfo 里面初始化呢?
分享到:
相关推荐
4. **表单验证**:特别针对表单数据绑定,提供了验证规则的集成,使得在用户交互过程中能够即时反馈输入的有效性。 这个工具可以与Android的MVVM(Model-View-ViewModel)架构模式完美配合,使得在处理表单数据时,...
在C#编程中,数据绑定是一项关键特性,它允许开发者将UI控件与数据源连接起来,实现数据的动态展示和交互。数据绑定控件在Windows Forms和WPF(Windows Presentation Foundation)等平台上广泛使用,简化了用户界面...
总结来说,数据绑定机制通过`BindingContext`、`CurrencyManager`、`PropertyManager`和`Binding`类实现了Windows Forms应用中控件与数据源之间的动态交互,提供了强大的数据可视化和用户输入验证功能。理解和熟练...
在实际应用中,数据绑定往往伴随着数据验证,确保用户输入的数据符合业务规则。WPF提供了`INotifyPropertyChanged`接口,用于通知UI数据源中的数据已更改;同时,`IDataErrorInfo`或`ValidationRule`类用于执行验证...
在Windows Presentation Foundation (WPF) 中,数据绑定是将用户界面(UI)元素与应用程序的数据模型连接起来的关键机制。这使得UI可以动态地反映数据的变化,反之亦然。本示例将详细介绍WPF中的五种数据绑定方式:...
数据绑定允许UI(用户界面)组件与数据源进行同步,使得数据的变化能够实时反映在界面上,反之亦然。在本实验中,我们将深入探讨这一主题。 一、数据绑定基本原理 数据绑定的核心在于建立UI元素和数据源之间的连接...
"利用数据绑定控件录入数据"这一主题主要涉及如何在数据库操作中通过特定的控件来实现数据的输入、更新和显示。在这个过程中,我们将探讨数据绑定的概念,以及如何在实际应用中使用它来处理员工薪资信息。 首先,...
7. **验证规则(Validation Rules)**:WPF提供了内置的验证框架,允许你在数据绑定过程中添加验证规则,确保输入数据的正确性。 在提供的"TestBindData.sln"项目中,很可能是包含了一个WPF应用程序,演示了如何...
数据绑定是Windows Presentation Foundation(WPF)框架中的核心特性,它简化了用户界面(UI)与应用程序业务逻辑之间的数据交互。在WPF中,数据绑定允许开发者将UI元素的属性与数据源的属性关联起来,确保UI的更新...
在ASP.NET中,数据绑定是一项核心功能,它使得开发者能够轻松地将Web应用程序的界面元素与数据源连接起来,动态地展示、编辑和管理数据。本实验“实验4 _数据绑定_asp.net数据绑定_”主要关注两个关键控件:GridView...
在Windows Presentation Foundation(WPF)中,数据绑定是一种强大的机制,它允许UI元素与应用程序的数据模型之间进行自动同步。这个“WPF简单数据绑定demo”是专为新手设计的,旨在帮助初学者快速掌握这一核心概念...
在Windows Presentation Foundation (WPF)中,数据绑定是一种强大的机制,它使得用户界面(UI)元素可以直接与数据源进行交互,实现了数据和UI之间的同步更新。这个例子旨在帮助初学者理解并掌握WPF中的数据绑定概念。...
在本文中,我们将深入探讨WPF(Windows Presentation Foundation)中的数据绑定,特别是关于自定义数据验证和错误模板的使用。WPF数据绑定是其强大的功能之一,它允许UI(用户界面)元素与应用程序中的数据模型进行...
3. 安全性:确保对用户输入进行验证,防止SQL注入等安全问题。 4. 更新策略:了解何时调用`DataBind()`,以防止不必要的数据重新绑定。 综上所述,ASP.NET中的数据绑定是一个强大且灵活的功能,它简化了Web应用程序...
数据绑定常常与数据验证结合使用,确保用户输入的数据符合预期格式和规则,提高数据的准确性和安全性。 总结来说,.NET数据绑定是ASP.NET开发中不可或缺的一部分,它简化了数据和用户界面之间的交互,让开发者能够...
在进行数据操作前,通常需要进行数据验证以确保输入的有效性。可以使用DataGridView的`CellValidating`事件进行检查: ```csharp private void dataGridView_CellValidating(object sender, ...
在Windows Presentation Foundation(WPF)中,数据绑定是一种强大的机制,它允许UI元素与应用程序的数据模型之间进行自动同步。这个“WPF界面数据绑定例子”提供了深入理解和实践这一功能的绝佳机会。WPF的数据绑定...
数据绑定是.NET框架中的一个强大功能,它允许UI控件与数据源之间建立动态连接,使用户界面能够实时反映数据源的变化。 在Windows Forms 2.0中,数据绑定提供了对多种数据源的支持,包括数据库、XML、数组、集合和...
它使用数据绑定和验证功能,极大地减少了创建数据库驱动的应用程序所需的工作量。 8. **异步数据绑定**:在现代Web应用中,为了提供更好的用户体验,异步数据绑定变得越来越重要。ASP.NET支持异步操作,比如使用...
3. **数据绑定**:使用Dojo的`dijit/form`组件,如`TextBox`,将表单元素与Stateful对象的属性绑定。可以通过`data-dojo-bindId`属性指定绑定的属性名。 ```html ``` 4. **监听变化**:由于Stateful对象的属性...