在jsp页面,一个表单如果字段很多的话,要写很多request.getParameter(name)之类的代码,如果用web framework的话,则可以免去写这些代码的麻烦。但如果不用framework是否也可以达到参数自动填充的功能呢? 答案是肯定的。
下面是我在就业网重构时用到的一个java类,其中就是对BeanUtils进行了简单的封装。
import java.sql.Date;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.SqlDateConverter;
public class NullSafeBeanUtils {
public final static String EMPTY_STRING = "";
public static boolean isNull(Object obj) {
return obj == null;
}
public static String getProperty(Object bean, String property) {
if (bean == null) {
return EMPTY_STRING;
}
try {
String str = BeanUtils.getProperty(bean, property);
if (str == null) {
return EMPTY_STRING;
}
return str;
} catch (Exception e) {
return EMPTY_STRING;
}
}
public static void populate(Object bean, Map props) {
if (bean == null) {
return;
}
try {
SqlDateConverter con = new SqlDateConverter(new Date(System.currentTimeMillis()));
ConvertUtils.register(con, java.sql.Date.class);
BeanUtils.populate(bean, props);
} catch (Exception e) {
e.printStackTrace();
}
}
// 此处省略了一些其他代码
}
在这里,poplulate方法就是我用来自动填充参数的。要实现自动填充,只需简单调用此方法就行了。看一个例子:
JobExperience jobExp = new JobExperience();
NullSafeBeanUtils.populate(jobExp, request.getParameterMap());
是不是简单了许多?要注意的是表单的各输入字段名要和bean的各属性名对应才能自动填充。另外NullSafeBeanUtils 的getProperty方法也很有用,可以避免写
if (bean != null) {
yyy = bean.getXXX()==null?"":bean.getXXX()
}
这样的代码,直接写NullSafeBeanUtils.getProperty(bean, "XXX")就可以了。