基于SSH框架-CRM客户资源管理系统-简单小项目开发记录-CRM系统-03
2017-11-28 20:39
821 查看
一、编辑员工以及基本信息的回显
二、编辑员工以及部门和职务的回显
三、编辑员工之ajax的二
4000
级联动
根据部门查询该部门下的所有职务:
ajax实现:
注:json数据转换成字符串需要json-lib工具!
API:
JavaBean or Map :JsonObject.fromObject(...).toString()
List or Array:JsonArray.fromObject(...).toString()
Ajax接收Json数据字符串:
var textData = new XMLHttpRequest().responseText()
Json数据字符串转成Json对象
var jsonData = eval("("+textDate+")")
四、课程类别之查询所有(这个比较简单这里就不贴代码了。)
五、课程类别之条件查询(***)
六、课程类别之添加或更新
添加或更新:savaOrUpdate()!
dao层需要两个方法:
service层需要两个方法:
web层需要两个方法:
点击添加、或者编辑都会进入这个页面,只不过编辑数据会回显!所有dao层有个根据id查询对象的方法,Action中把对象压入栈顶,方便编辑的时候内容自动回显!
该添加或编辑页面的源码:
点击添加,页面源代码里隐藏域是不会显示的:
点击编辑:
因为添加和编辑走的是同一份页面,是同一个action,编辑链接里维护一个id,添加链接里没有,所以action中需要有个方法判断id是否存在,如果id存在,根据id查询并且压栈之后struts转向编辑页面,数据回显,并且页面源代码中隐藏域id值出现。如果没有id那我不用查询不用压栈,直接显示添加页面,对应页面源代码隐藏域是没有的,填写好数据,点击保存,定向到addOrEdit.action,执行该Action中的saveOrUpdate方法,因为hibernate一级缓存被修改与快照不一致,所以会自动更改数据库中数据!
附:
/*StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,
并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,
例如,如果输入为null则返回也是null等,具体可以查看源代码)。除了构造器,StringUtils中一共有130多个
方法,并且都是static的,所以我们可以这样调用StringUtils.xxx()。*/
1. public static boolean isEmpty(String str)
判断某字符串是否为空,为空的标准是str==null或str.length()==0
下面是StringUtils判断是否为空的示例:
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在StringUtils中空格作非空处理
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false
2. public static boolean isNotEmpty(String str)
判断某字符串是否非空,等于!isEmpty(String str)
下面是示例:
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true
3. public static boolean isBlank(String str)
判断某字符串是否为空或长度为0或由空白符(whitespace)构成
下面是示例:
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符StringUtils.isBlank()均识为空白符
StringUtils.isBlank("\b") = false //"\b"为单词边界符
StringUtils.isBlank("bob") = false
StringUtils.isBlank(" bob ") = false
4. public static boolean isNotBlank(String str)
判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成,等于!isBlank(String
a55a
str)
下面是示例:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("\t \n \f \r") = false
StringUtils.isNotBlank("\b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
5. public static String trim(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果输入为null则返回null
下面是示例:
StringUtils.trim(null) = null
StringUtils.trim("") = ""
StringUtils.trim(" ") = ""
StringUtils.trim(" \b \t \n \f \r ") = ""
StringUtils.trim(" \n\tss \b") = "ss"
StringUtils.trim(" d d dd ") = "d d dd"
StringUtils.trim("dd ") = "dd"
StringUtils.trim(" dd ") = "dd"
6. public static String trimToNull(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果变为null或"",则返回null
下面是示例:
StringUtils.trimToNull(null) = null
StringUtils.trimToNull("") = null
StringUtils.trimToNull(" ") = null
StringUtils.trimToNull(" \b \t \n \f \r ") = null
StringUtils.trimToNull(" \n\tss \b") = "ss"
StringUtils.trimToNull(" d d dd ") = "d d dd"
StringUtils.trimToNull("dd ") = "dd"
StringUtils.trimToNull(" dd ") = "dd"
7. public static String trimToEmpty(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果变为null或"",则返回""
下面是示例:
StringUtils.trimToEmpty(null) = ""
StringUtils.trimToEmpty("") = ""
StringUtils.trimToEmpty(" ") = ""
StringUtils.trimToEmpty(" \b \t \n \f \r ") = ""
StringUtils.trimToEmpty(" \n\tss \b") = "ss"
StringUtils.trimToEmpty(" d d dd ") = "d d dd"
StringUtils.trimToEmpty("dd ") = "dd"
StringUtils.trimToEmpty(" dd ") = "dd"
8. public static String strip(String str)
去掉字符串两端的空白符(whitespace),如果输入为null则返回null
下面是示例(注意和trim()的区别):
StringUtils.strip(null) = null
StringUtils.strip("") = ""
StringUtils.strip(" ") = ""
StringUtils.strip(" \b \t \n \f \r ") = "\b"
StringUtils.strip(" \n\tss \b") = "ss \b"
StringUtils.strip(" d d dd ") = "d d dd"
StringUtils.strip("dd ") = "dd"
StringUtils.strip(" dd ") = "dd"
9. public static String stripToNull(String str)
去掉字符串两端的空白符(whitespace),如果变为null或"",则返回null
下面是示例(注意和trimToNull()的区别):
StringUtils.stripToNull(null) = null
StringUtils.stripToNull("") = null
StringUtils.stripToNull(" ") = null
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
10. public static String stripToEmpty(String str)
去掉字符串两端的空白符(whitespace),如果变为null或"",则返回""
下面是示例(注意和trimToEmpty()的区别):
StringUtils.stripToNull(null) = ""
StringUtils.stripToNull("") = ""
StringUtils.stripToNull(" ") = ""
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
@Override public CrmStaff findById(String staffId) { // TODO Auto-generated method stub CrmStaff findStaff = this.getHibernateTemplate().get(CrmStaff.class,staffId); return findStaff; }
//根据id查询员工 @Override public CrmStaff findById(String staffId) { // TODO Auto-generated method stub CrmStaff findStaff = staffDao.findById(staffId); return findStaff; } /* 3 方法3:先通过id查询,比较密码是否一致 * * 如果不一致,对密码进行MD5加密 * * 将出OID之外的数据,全部设置 * * 原因:一级缓存被修改了,与快照不一致,默认情况下,当提交,自动执行update语句。 */ @Override public void updateStaff(CrmStaff staff) { // TODO Auto-generated method stub CrmStaff findStaff = staffDao.findById(staff.getStaffId()); if(!findStaff.getLoginPwd().equals(staff.getLoginPwd())){ findStaff.setLoginPwd(MyStringUtils.getMD5Value(staff.getLoginPwd())); } findStaff.setLoginName(staff.getLoginName()); findStaff.setStaffName(staff.getStaffName()); findStaff.setGender(staff.getGender()); findStaff.setOnDutyDate(staff.getOnDutyDate()); findStaff.setPost(staff.getPost()); }
//编辑员工前的操作 public String editUI(){ //1.通过id查询员工 CrmStaff findStaff = staffService.findById(staff.getStaffId()); ActionContext.getContext().getValueStack().push(findStaff); //查询所有部门 List<CrmDepartment> findAllDepartment = departmentService.findAllDepartment(); ActionContext.getContext().getValueStack().set("findAllDepartment",findAllDepartment); return "editUI"; } //员工编辑 public String editStaff(){ staffService.updateStaff(staff); return "editStaff"; } }
二、编辑员工以及部门和职务的回显
<s:form namespace = "/" action = "staffAction_editStaff"> <!-- 隐藏域:存放用户id --> <s:hidden name = "staffId" value = "%{staffId}"></s:hidden> <table width="88%" border="0" class="emp_table" style="width:80%;"> <tr> <td>登录名:</td> <td><s:textfield name="loginName"></s:textfield></td> <td>密码:</td> <td><s:password name="loginPwd" showPassword="true"></s:password> </td> </tr> <tr> <td>姓名:</td> <td><s:textfield name="staffName"></s:textfield></td> <td>性别:</td> <td> <s:radio list="{'男','女'}" name="gender"></s:radio> </td> </tr> <tr> <td width="10%">所属部门:</td> <td width="20%"> <s:select list="findAllDepartment" name="post.department.depId" onchange="showPost(this)" listKey="depId" listValue="depName" headerKey="" headerValue="----请--选--择----" > </s:select> </td> <td width="8%">职务:</td> <td width="62%"> <s:select list="post != null ? post.department.postSet : {}" name="post.postId" listKey="postId" listValue="postName" headerKey="" headerValue="----请--选--择----" id="postSelectId" ></s:select> </td> </tr> <tr> <td width="10%">入职时间:</td> <td width="20%"> <s:date name="onDutyDate" format="yyyy-MM-dd" var="myDate"/> <s:textfield name="onDutyDate" readonly="true" value="%{#myDate}" onfocus="c.showMoreDay=true;c.show(this);"></s:textfield> </td> <td width="8%"></td> <td width="62%"></td> </tr> </table> </s:form>
三、编辑员工之ajax的二
4000
级联动
根据部门查询该部门下的所有职务:
package com.itheima.crm.post.dao.impl; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.itheima.crm.department.domain.CrmDepartment; import com.itheima.crm.post.dao.PostDao; import com.itheima.crm.post.domain.CrmPost; public class PostDaoImpl extends HibernateDaoSupport implements PostDao { @Override public List<CrmPost> findAllPostWithDepartment(CrmDepartment department) { // TODO Auto-generated method stub List<CrmPost> findALLPostWithDepartment= this.getHibernateTemplate().find("from CrmPost where department = ?",department); return findALLPostWithDepartment; } }
package com.itheima.crm.post.service.impl; import java.util.List; import com.itheima.crm.department.domain.CrmDepartment; import com.itheima.crm.post.dao.PostDao; import com.itheima.crm.post.domain.CrmPost; import com.itheima.crm.post.service.PostService; public class PostServiceImpl implements PostService { //注入PostDao private PostDao postDao; public void setPostDao(PostDao postDao) { this.postDao = postDao; } @Override public List<CrmPost> findAllPostWithDepartment(CrmDepartment department) { // TODO Auto-generated method stub return postDao.findAllPostWithDepartment(department); } }
//根据部门查询改部门下所有的职务(编辑中的ajax 二级联动) //TODO:ajax的二级联动有问题(已解决) public String findAllPostWithDepartment() throws IOException{ //1 查询 List<CrmPost> findAllPostWithDepartment = this.postService.findAllPostWithDepartment(post.getDepartment()); //2 将java对象 转换 json数据 //2.1 排除不需要数据 JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setExcludes(new String[]{"department","staffSet"}); //2.2 转换 String jsonData = JSONArray.fromObject(findAllPostWithDepartment,jsonConfig).toString(); //3 将json数据发送给浏览器 //3.1 响应中文乱码 ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8"); //3.2 发送 ServletActionContext.getResponse().getWriter().print(jsonData); return "none"; }
ajax实现:
<script type="text/javascript"> function showPost(obj){ //1.获得部门id var depId = obj.value; //2.发送ajax通过部门查询职务 //2.1获得ajax引擎 var xmlHttpRequest = null; if(window.XMLHttpRequest){ xmlHttpRequest = new XMLHttpRequest(); }else if(window.ActiveXObject){ xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } //2.2设置回调函数 xmlHttpRequest.onreadystatechange = function(){ //请求完成,正常响应 if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){ //3.获得json数据字符串 var textData = xmlHttpRequest.responseText; //3.1将json数据字符串转换为json对象 var jsonData = eval("("+textData+")"); //获得select元素对象 var postSelectElement = document.getElementById("postSelectId"); postSelectElement.innerHTML = ("<option value = ''>----请--选--择----</option>"); //3.2遍历 for(var i = 0;i<jsonData.length;i++){ var jsonObj = jsonData[i]; var postId = jsonObj.postId; var postName = jsonObj.postName; //3.3将数据显示到select标签 postSelectElement.innerHTML += ("<option value = '"+postId+"'>"+postName+"</option>"); } } } //2.3建立连接 var url = "${pageContext.request.contextPath}/postAction_findAllPostWithDepartment?department.depId="+depId; xmlHttpRequest.open("GET", url); //2.4发送请求 xmlHttpRequest.send(null); } </script>
注:json数据转换成字符串需要json-lib工具!
API:
JavaBean or Map :JsonObject.fromObject(...).toString()
List or Array:JsonArray.fromObject(...).toString()
Ajax接收Json数据字符串:
var textData = new XMLHttpRequest().responseText()
Json数据字符串转成Json对象
var jsonData = eval("("+textDate+")")
四、课程类别之查询所有(这个比较简单这里就不贴代码了。)
五、课程类别之条件查询(***)
//2.带有条件的查询所有 @Override public List<CrmCourseType> findCourseTypeWithCondition(String condition,Object[] params) { // TODO Auto-generated method stub String hql = "from CrmCourseType where 1 = 1" + condition; return this.getHibernateTemplate().find(hql, params); }
@Override public List<CrmCourseType> findAllCourseWithCondition(CrmCourseType courseType) { // TODO Auto-generated method stub //1.1拼凑查询条件 StringBuilder sb = new StringBuilder(); //1.2拼凑实际参数,可以重复,有顺序 List<Object> paramsList = new ArrayList<Object>(); //2.过滤条件 //2.1课程类别 if(StringUtils.isNotBlank(courseType.getCourseName())){ sb.append("and courseName like ?"); paramsList.add("%"+courseType.getCourseName()+"%"); } //2.2课程简介 if(StringUtils.isNotBlank(courseType.getRemark())){ sb.append("and remark like ?"); paramsList.add("%"+courseType.getRemark()+"%"); } //2.3总学时 if(StringUtils.isNotBlank(courseType.getTotalStart())){ sb.append("and total >= ?"); paramsList.add(Integer.parseInt(courseType.getTotalStart())); } if(StringUtils.isNotBlank(courseType.getTotalEnd())){ sb.append("and total <= ?"); paramsList.add(Integer.parseInt(courseType.getTotalEnd())); } //2.4课程费用 if(StringUtils.isNotBlank(courseType.getCourseCostStart())){ sb.append("and courseCost >= ?"); paramsList.add(Double.parseDouble(courseType.getCourseCostStart())); } if(StringUtils.isNotBlank(courseType.getCourseCostEnd())){ sb.append("and courseCost <= ?"); paramsList.add(Double.parseDouble(courseType.getCourseCostEnd())); } //3.使用 //条件 String condition = sb.toString();//and...?and...? //实际的参数 Object[] params = paramsList.toArray(); List<CrmCourseType> findCourseTypeWithCondition = courseTypeDao.findCourseTypeWithCondition(condition, params); return findCourseTypeWithCondition; }
public String findAllCourseType(){ /*//查询所有课程类别 List<CrmCourseType> findAllCourseType = this.courseTypeService.findAllCourseType(); ActionContext.getContext().getValueStack().set("findAllCourseType", findAllCourseType);*/ //带有条件的查询所有 List<CrmCourseType> findAllCourseType = this.courseTypeService.findAllCourseWithCondition(courseType); ActionContext.getContext().getValueStack().set("findAllCourseType", findAllCourseType); return "findAllCourseType"; }注:条件查询就是查询所有,是带有条件的查询所有!
六、课程类别之添加或更新
添加或更新:savaOrUpdate()!
dao层需要两个方法:
@Override public CrmCourseType findById(String courseTypeId) { // TODO Auto-generated method stub return this.getHibernateTemplate().get(CrmCourseType.class,courseTypeId); } @Override public void saveOrUpdate(CrmCourseType courseType) { // TODO Auto-generated method stub this.getHibernateTemplate().saveOrUpdate(courseType); }
service层需要两个方法:
@Override public CrmCourseType findById(String courseTypeId) { // TODO Auto-generated method stub return courseTypeDao.findById(courseTypeId); } @Override public void addOrEdit(CrmCourseType courseType) { // TODO Auto-generated method stub courseTypeDao.saveOrUpdate(courseType); }
web层需要两个方法:
/** * 添加或编辑显示jsp页面 * @return */ public String addOrEditUI(){ //如果有id就是编辑,编辑需要查询详情 if(StringUtils.isNotBlank(this.courseType.getCourseTypeId())){ //将查询的详情压入到栈顶,方便标签自动的回显 CrmCourseType findCourseType = this.courseTypeService.findById(this.courseType.getCourseTypeId()); ActionContext.getContext().getValueStack().push(findCourseType); } return "addOrEditUI"; } /** * 添加或编辑 功能 * @return */ public String addOrEdit(){ this.courseTypeService.addOrEdit(courseType); return "addOrEdit"; }jsp页面需要注意的部分:
<td width="11%" align="center"> <s:a namespace="/" action="courseTypeAction_addOrEditUI"> <s:param name="courseTypeId" value="courseTypeId"></s:param> <img src="${pageContext.request.contextPath}/images/button/modify.gif" class="img" /> </s:a> </td>(编辑时候需要携带一个参数!)
点击添加、或者编辑都会进入这个页面,只不过编辑数据会回显!所有dao层有个根据id查询对象的方法,Action中把对象压入栈顶,方便编辑的时候内容自动回显!
该添加或编辑页面的源码:
<s:form namespace = "/" action = "courseTypeAction_addOrEdit"> <!-- 隐藏域:如果有值,即更新的时候才显示 --> <s:if test="courseTypeId != null"> <s:hidden name="courseTypeId" value="%{courseTypeId}"></s:hidden> </s:if> <table width="88%" border="0" class="emp_table" style="width:80%;"> <tr> <td width="10%">课程类别:</td> <td width="20%"><s:textfield name = "courseName"></s:textfield></td> <td width="8%">总学时:</td> <td width="62%"><s:textfield name = "total"></s:textfield></td> </tr> <tr> <td>课程费用:</td> <td><s:textfield name = "courseCost"></s:textfield></td> <td></td> <td></td> </tr> <tr> <td>课程简介:</td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td colspan="4"><s:textarea name = "remark" cols = "60" rows = "10"></s:textarea></td> </tr> </table> </s:form>隐藏域的部分是一个需要注意的部分!
点击添加,页面源代码里隐藏域是不会显示的:
点击编辑:
因为添加和编辑走的是同一份页面,是同一个action,编辑链接里维护一个id,添加链接里没有,所以action中需要有个方法判断id是否存在,如果id存在,根据id查询并且压栈之后struts转向编辑页面,数据回显,并且页面源代码中隐藏域id值出现。如果没有id那我不用查询不用压栈,直接显示添加页面,对应页面源代码隐藏域是没有的,填写好数据,点击保存,定向到addOrEdit.action,执行该Action中的saveOrUpdate方法,因为hibernate一级缓存被修改与快照不一致,所以会自动更改数据库中数据!
附:
/*StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,
并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,
例如,如果输入为null则返回也是null等,具体可以查看源代码)。除了构造器,StringUtils中一共有130多个
方法,并且都是static的,所以我们可以这样调用StringUtils.xxx()。*/
1. public static boolean isEmpty(String str)
判断某字符串是否为空,为空的标准是str==null或str.length()==0
下面是StringUtils判断是否为空的示例:
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在StringUtils中空格作非空处理
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false
2. public static boolean isNotEmpty(String str)
判断某字符串是否非空,等于!isEmpty(String str)
下面是示例:
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true
3. public static boolean isBlank(String str)
判断某字符串是否为空或长度为0或由空白符(whitespace)构成
下面是示例:
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符StringUtils.isBlank()均识为空白符
StringUtils.isBlank("\b") = false //"\b"为单词边界符
StringUtils.isBlank("bob") = false
StringUtils.isBlank(" bob ") = false
4. public static boolean isNotBlank(String str)
判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成,等于!isBlank(String
a55a
str)
下面是示例:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("\t \n \f \r") = false
StringUtils.isNotBlank("\b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
5. public static String trim(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果输入为null则返回null
下面是示例:
StringUtils.trim(null) = null
StringUtils.trim("") = ""
StringUtils.trim(" ") = ""
StringUtils.trim(" \b \t \n \f \r ") = ""
StringUtils.trim(" \n\tss \b") = "ss"
StringUtils.trim(" d d dd ") = "d d dd"
StringUtils.trim("dd ") = "dd"
StringUtils.trim(" dd ") = "dd"
6. public static String trimToNull(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果变为null或"",则返回null
下面是示例:
StringUtils.trimToNull(null) = null
StringUtils.trimToNull("") = null
StringUtils.trimToNull(" ") = null
StringUtils.trimToNull(" \b \t \n \f \r ") = null
StringUtils.trimToNull(" \n\tss \b") = "ss"
StringUtils.trimToNull(" d d dd ") = "d d dd"
StringUtils.trimToNull("dd ") = "dd"
StringUtils.trimToNull(" dd ") = "dd"
7. public static String trimToEmpty(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果变为null或"",则返回""
下面是示例:
StringUtils.trimToEmpty(null) = ""
StringUtils.trimToEmpty("") = ""
StringUtils.trimToEmpty(" ") = ""
StringUtils.trimToEmpty(" \b \t \n \f \r ") = ""
StringUtils.trimToEmpty(" \n\tss \b") = "ss"
StringUtils.trimToEmpty(" d d dd ") = "d d dd"
StringUtils.trimToEmpty("dd ") = "dd"
StringUtils.trimToEmpty(" dd ") = "dd"
8. public static String strip(String str)
去掉字符串两端的空白符(whitespace),如果输入为null则返回null
下面是示例(注意和trim()的区别):
StringUtils.strip(null) = null
StringUtils.strip("") = ""
StringUtils.strip(" ") = ""
StringUtils.strip(" \b \t \n \f \r ") = "\b"
StringUtils.strip(" \n\tss \b") = "ss \b"
StringUtils.strip(" d d dd ") = "d d dd"
StringUtils.strip("dd ") = "dd"
StringUtils.strip(" dd ") = "dd"
9. public static String stripToNull(String str)
去掉字符串两端的空白符(whitespace),如果变为null或"",则返回null
下面是示例(注意和trimToNull()的区别):
StringUtils.stripToNull(null) = null
StringUtils.stripToNull("") = null
StringUtils.stripToNull(" ") = null
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
10. public static String stripToEmpty(String str)
去掉字符串两端的空白符(whitespace),如果变为null或"",则返回""
下面是示例(注意和trimToEmpty()的区别):
StringUtils.stripToNull(null) = ""
StringUtils.stripToNull("") = ""
StringUtils.stripToNull(" ") = ""
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
相关文章推荐
- 基于SSH框架-CRM客户资源管理系统-简单小项目开发记录-CRM系统-02
- 基于SSH框架-CRM客户资源管理系统-简单小项目开发记录-CRM系统-04
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程
- 基于ASP.NET MVC3+ADO.NET4+EF4.1+Jquery+插件等技术下的CRM企业客户管理系统
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载
- Java web----一个简单的客户管理系统(CRM)
- Winform开发框架之客户关系管理系统(CRM)的报价单和销售单的处理
- 简单管理系统的开发流程(基于XML)
- 【课程分享】基于plusgantt的项目管理系统实战开发(Spring3+JDBC+RMI的架构、自己定义工作流)
- duang!当CRM遇到项目管理“客户项目管理系统”
- 续易crm源码客户资源管理系统crm源码(源代码c#)
- 项目分享:通过使用SSH框架的公司-学员关系管理系统(CRM)
- 基于ASP.NET WPF技术及MVP模式实战太平人寿客户管理项目开发(Repository模式)课程分享
- 基于Access数据库利用ASP平台开发的简单工资管理系统
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列3-客户分类和配置管理实现
- 开发项目:黄冈基站资源管理系统
- 一点一点做网站开发--基于KIS的数据库项目管理(PHP系统二次开发) 上
- 基于数据库和ASP的网上教学资源管理系统的开发
- 基于ASP.NET WPF技术及MVP模式实战太平人寿客户管理项目开发(Repository模式)
- ado.net视频教程-实战开发CRM企业客户管理系统