整体流程是这样:
比如学校管理系统中添加一个学生的相关信息(姓名、年龄……),在addStudent.jsp提交到Form中,再到Action,在Action中直接将Form中的信息拷贝(用PropertyUtils)到StudentDTO中(StudentDTO是一个学生JavaBean),再调用模型层里的insert()方法,从而将StudentDTO里的值添加到数据库就是这样一个过程,但,如果在addStudent.jsp页面中的某些表单内容前后有空格,需要用trim()去掉,我平时一般是在数据插入时处理的:
ps.setString(2, studentDTO.getName().trim());今天发现个问题,如果页面的某些表单没有输入内容,那么studentDTO.getName()=null,null.trim()当然就不行1、曾经有种做法,就是在StudentDTO类中,把属性的初始值都设为"",如:private String name = "","".trim()当然行,但本来某条学生信息没值的,现在把它的值设为"",""占用内存空间不说,而且似乎……2、如果在action不用拷贝的方法,从Form中取出,再一条条添加到StudentDTO,添加时判断下是否为null再trim()即可,这种方法可行,但如果数据量大的话,就不方便了究竟在哪处地添加trim()合适呢,应该如何解决?
比如学校管理系统中添加一个学生的相关信息(姓名、年龄……),在addStudent.jsp提交到Form中,再到Action,在Action中直接将Form中的信息拷贝(用PropertyUtils)到StudentDTO中(StudentDTO是一个学生JavaBean),再调用模型层里的insert()方法,从而将StudentDTO里的值添加到数据库就是这样一个过程,但,如果在addStudent.jsp页面中的某些表单内容前后有空格,需要用trim()去掉,我平时一般是在数据插入时处理的:
ps.setString(2, studentDTO.getName().trim());今天发现个问题,如果页面的某些表单没有输入内容,那么studentDTO.getName()=null,null.trim()当然就不行1、曾经有种做法,就是在StudentDTO类中,把属性的初始值都设为"",如:private String name = "","".trim()当然行,但本来某条学生信息没值的,现在把它的值设为"",""占用内存空间不说,而且似乎……2、如果在action不用拷贝的方法,从Form中取出,再一条条添加到StudentDTO,添加时判断下是否为null再trim()即可,这种方法可行,但如果数据量大的话,就不方便了究竟在哪处地添加trim()合适呢,应该如何解决?
解决方案 »
- java web 实现网络直播功能?
- mybatis 传入表名参数,如何判断呢?
- 如何实现 一个表格中 拖拽的问题 就是鼠标拖住一个表格的一行到另一个表格 可以直接实现复制?
- 简单问题 举手之劳动希望给下解答,跨区了我,~~~~~~~~~~~~~~~~~``
- 在JSP页面中,点击一个链接,弹出一个<div>格式的窗体框,在这个框中怎么显示关于被点击的记录的内容?
- 求一本Java ajax的电子书教程、在这我先谢了、直接发我邮箱就好了
- 求助,急.. 请高手给下 JSP连接ACCESS数据库,修改数据,添加数据 删除数据. 显示 表的列子
- 求:请问在JAVA里面如何操作word文件的域呢?
- 传值问题求教
- 程序连接服务端后台问题
- 为什么我在myeclipse里建不了Servlet ?
- myeclipes 中ctrl+左键无效 不能追溯代码
不可以直接给StudentDTO赋值么,拷贝多麻烦
public class StudentForm extends ActionForm {
private StudentDTO studentDTO = new StudentDTO();
public void setName(String name) {
//这里做判断
if (name != null)
studentDTO.setName(name.trim());
}
//省略其它
public StudentDTO getBean() { //不用拷贝了
return studentDTO;
}
}
getParameter等方法进行过滤:
public class TrimmedParameterRequest extends HttpServletRequestWrapper { /**
* 创建一个新的<code>TrimmedRequest</code>对象。
*
* @param request
*/
public TrimmedParameterRequest(HttpServletRequest request) {
super(request);
} /**
* 根据指定的参数名,返回去除前后空白字符的参数值。
*
* @param name
* 参数名
* @return 去除前后空格的参数值
* @see javax.servlet.ServletRequestWrapper#getParameter(java.lang.String)
*/
@Override
public String getParameter(String name) {
return StringUtils.trim(super.getParameter(name));
} /**
* 返回参数名-参数值数组映射,其中的参数数组将被去除前后空白字符。
*
* @return 去除空白字符的参数名-参数值数组映射
* @see javax.servlet.ServletRequestWrapper#getParameterMap()
*/
@SuppressWarnings("unchecked")
@Override
public Map getParameterMap() {
Map<String, String[]> parameterMap = new LinkedHashMap<String, String[]>();
Enumeration<String> names = super.getParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
parameterMap.put(name, getParameterValues(name));
}
return parameterMap;
} /**
* 根据指定的参数名,返回去除前后空格的参数值数组。
*
* @param name
* 参数名
* @return 去除前后空格的参数值数组
* @see javax.servlet.ServletRequestWrapper#getParameterValues(java.lang.String)
*/
@Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name).clone();
for (int i = 0; i < values.length; i++) {
values[i] = StringUtils.trim(values[i]);
}
return values;
}}第二,你的Form写法效率太低了,而且非常不方便:public class StudentForm extends ActionForm {
private StudentDTO student;
public void reset(...,...) {
super.reset(...,...);
student = new StudentDTO();
}
public StudentDTO getStudent() {
return this.student;
}
public void setStudent(StudentDTO student) {
this.student = student;
}
}jsp上面的参数
<html:form action="....">
<html:text property="student.name" />
</html:form>
public class StudentForm extends ActionForm {
private StudentDTO studentDTO = new StudentDTO();
public void setName(String name) {
//这里做判断
if (name != null)
studentDTO.setName(name.trim());
}
//省略其它
public StudentDTO getBean() { //不用拷贝了
return studentDTO;
}
}
或者在页面js验证下 必须填写内容