处理前后空格,使用trim()的困惑?

ruoye_2008 2009-12-03 06:58:55
整体流程是这样:
比如学校管理系统中添加一个学生的相关信息(姓名、年龄……),在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()合适呢,应该如何解决?
...全文
645 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruoye_2008 2009-12-08
  • 打赏
  • 举报
回复
最后直接采用了2楼的方法

3楼的自己再研究下

4楼的可以,但太麻烦了
longtenggdf 2009-12-03
  • 打赏
  • 举报
回复
先判空啊,最基本做法!
kojava 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 panhaichun 的回复:]
楼主用的是struts1吧。。那简单了
Java codepublicclass StudentFormextends ActionForm {private StudentDTO studentDTO=new StudentDTO();publicvoid setName(String name) {//这里做判断if (name!=null)
studentDTO.setName(name.trim());
}//省略其它。。。public StudentDTO getBean() {//不用拷贝了return studentDTO;
}
}
[/Quote]
同意
kbyst 2009-12-03
  • 打赏
  • 举报
回复
写个js trim一下呗 反正也是要前台校验的

用一楼的方法也行,struts1就在formbean里处理,struts2就在Action里处理
xiezhifu 2009-12-03
  • 打赏
  • 举报
回复
学习!
zl3450341 2009-12-03
  • 打赏
  • 举报
回复
加个判断啊 1楼的就可以
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验证下 必须填写内容
道光2008 2009-12-03
  • 打赏
  • 举报
回复
ps.setString(2, studentDTO.getName()==null?"":studentDTO.getName().trim());
shine333 2009-12-03
  • 打赏
  • 举报
回复
Filter或者RequestProcessor.processPopulate中,使用HttpRequestWrapper,对
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>
panhaichun 2009-12-03
  • 打赏
  • 举报
回复
楼主用的是struts1吧。。那简单了


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;
}
}
panhaichun 2009-12-03
  • 打赏
  • 举报
回复
前台就可以过滤掉空格了。


不可以直接给StudentDTO赋值么,拷贝多麻烦
PowerBI系列之Power Query专题1.  获取数据 数据源种类介绍和获取Excel数据源输入数据和拷贝数据:创建辅助表解析Json/XML数据格式获取Web网页数据和URL添加动态参数连接数据的四种模式:Import、DirectQuery、Live Connection、Dual双 属于混合模式连接数据库:Sql server、 Mysql(直连但是必须先安装一个mysql插件)DirectQuery直连查询:Sql serverODBC方式获取数据表关联或多个Sql或调用存储过程获取数据SQL中动态传参和自定义函数: sql中使用参数或数据库名称使用参数连接Sharepoint和OneDrive数据源连接Dataset和Dataflow 替换本地数据源为Sharepoint数据源并保留数据处理操作 终止当前数据刷新Loading:Cancel Query数据源设置-重置数据连接凭证PBIDS连接数据源创建和使用报表模块(输入或值列表)利用报表模板和参数控制线下报表数据权限DirectQuery启用自动页面刷新和更改检测管理聚合表提高DirectQuery查询性能动态M查询参数提高DirectQuery查询性能添加数据刷新时间 DateTime.LocalNow()和Getdate()2.  数据清洗和M语言M语言和官方文档介绍PowerQuery中查阅M函数:=#shared, Ctrl+Space提示数据清洗之常用技能:提升标题、更改数据类型、保留删除错误或空行,删除重复项、选择列和删除列、填充单元格、合并列、拆分、提取、替换、条件替换、添加自定义列,添加条件列、添加索引列、分组、添加年月日列、追加和合并查询透视和逆透视以及转置合并单元格的Excel文件处理导入文件夹中多Excel文件并合并解决多文件合并中列顺序不一致使用参数和函数批量导入文件 文本中提取中文、英文、数字等处理双引号转义 列拆分详解解决列名改变错误解决列丢失错误动态显示、排序和重命名列为所有列名添加前缀列名字母大写和分隔符调整Trim标题列中的多余空格如何处理load数据错误为什么load的Excel数据有null空行为什么load的Excel数据标题在第二行灵活添加占位符规范同类相似数据数据按多列排序为分组添加Index序号分组内值合并诊断工具分析数据处理过程PowerQuery小技巧分享 新冠病例活动轨迹地图标识 

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧