并没有想象中的那么多顺利,在后台的管理 售票,列车等,出现了大大小小的问题。自己也只在实验课外投入时间。下周要抓紧时间了,不然感觉完成不了....
暂时完成了角色权限的登录控制和管理员控制车票和车辆的增删改查,下面介绍下在编写代码出现的问题以及解决方法
一丶首先从数据库中取出日期的格式错误
我用的数据库是mysql,在从数据库取出beginTime和endTime时,格式是2018-02-01 02:30:00.0。
我用SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),解析不了,抛出异常
解决办法:数据存放在数据库中都是字符串的格式,于是我用String.subString()方法,截取出正确的格式
String beginTime = rs.getString("beginTime").substring(0, 19);
String endTime = rs.getString("endTime").substring(0, 19);
System.out.println(beginTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
t.setBeginTime(sdf.parse(beginTime));
t.setEndTime(sdf.parse(endTime));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
二.在提交参数的时候,为了解决post方式和get方式的乱码 (采用过滤器)
public class EncodingFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 处理请求乱码
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletRequest myRequest = new MyRequest(httpServletRequest);
// 处理响应乱码
response.setContentType("text/html;charset=utf-8");
chain.doFilter(myRequest, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
// 自定义request对象
class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
private boolean hasEncode;
public MyRequest(HttpServletRequest request) {
super(request);// super必须写
this.request = request;
}
// 对需要增强方法 进行覆盖
@Override
public Map getParameterMap() {
// 先获得请求方式
String method = request.getMethod();
if (method.equalsIgnoreCase("post")) {
// post请求
try {
// 处理post乱码
request.setCharacterEncoding("utf-8");
return request.getParameterMap();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else if (method.equalsIgnoreCase("get")) {
// get请求
Map<String, String[]> parameterMap = request.getParameterMap();
if (!hasEncode) { // 确保get手动编码逻辑只运行一次
for (String parameterName : parameterMap.keySet()) {
String[] values = parameterMap.get(parameterName);
if (values != null) {
for (int i = 0; i < values.length; i++) {
try {
// 处理get乱码
values[i] = new String(values[i]
.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
hasEncode = true;
}
return parameterMap;
}
return super.getParameterMap();
}
@Override
public String getParameter(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
if (values == null) {
return null;
}
return values[0]; // 取回参数的第一个值
}
@Override
public String[] getParameterValues(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
return values;
}
}
注意:自定义myrequest对象(这里采用了包装设计模式) 对以下方法重写
public String[] getParameterValues(String name)
public String getParameter(String name)
public Map getParameterMap()
最后在web.xml下配置过滤器
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.hei.util.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
三:select标签回显数据
经过查阅得知,有三种方法.
这样就打到了回显数据的效果
第一种:使用EL表达式
<select name="concumerType" id="category">
<option value="" selected="selected">--选择商品类加--</option>
<option value="半价" ${t.concumerType=='半价'?'selected':''}>半价</option>
<option value="全价" ${t.concumerType=='全价'?'selected':''}>全价</option>
</select>
第一种的弊端很明显:当下拉列表的选项很多时,代码异常的增多.
第二种:使用js