想弄成这样
但是价格和面积两项的检索有问题
这是我的jsp代码
if(jiage1.equals(""))
{
jiage1="0";
}
if(jiage2.equals(""))
{
jiage2="888888888";
}
if(mianji1.equals(""))
{
mianji1="0";
}
if(mianji2.equals(""))
{
mianji2="888888888";
}
StringBuffer sql=new StringBuffer("from TChuzu where huxing like '%"+huxing.trim()+"%'"+" and dizhi like '%"+dizhi.trim()+"%'");
List chuzuList1=chuzuDAO.getHibernateTemplate().find(sql.toString());
for(int i=0;i<chuzuList1.size();i++)
{
TChuzu chuzu=(TChuzu)chuzuList1.get(i);
Double jiage=Double.parseDouble(chuzu.getJiage());
Double mianji=Double.parseDouble(chuzu.getMianji());
System.out.println(mianji+"YY");
if(jiage >=Double.parseDouble(jiage1) && jiage <=Double.parseDouble(jiage2) && mianji >=Double.parseDouble(mianji1) && mianji <=Double.parseDouble(mianji2))
{
chuzuList.add(chuzu);
}
}
request.setAttribute("chuzuList", chuzuList);
return ActionSupport.SUCCESS;
}
现在是上面的两项正常,下面两个报错。
求大神给看看怎么改合适
报错:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: java.lang.NumberFormatException: empty String
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
root cause
java.lang.NumberFormatException: empty String
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)
java.lang.Double.parseDouble(Double.java:510)
com.action.chuzuAction.chuzuRes(chuzuAction.java:168)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
你的堆栈很明确,168行调用parseDouble的问题,输入参数检查一下吧
java.lang.Double.parseDouble(Double.java:510)
com.action.chuzuAction.chuzuRes(chuzuAction.java:168)
你没贴行号:
maybe this
Double jiage=Double.parseDouble(chuzu.getJiage());
希望对你有帮助
没看出来和mysql什么关系,你这是传值问题吧。传了个空字符串,转化数字的时候出错
在下面两句中:
Double jiage=Double.parseDouble(chuzu.getJiage());
Double mianji=Double.parseDouble(chuzu.getMianji());
chuzu.getJiage()、chuzu.getMianji()这两个方法的返回值不是纯数字,或不符合数字格式。
1.最好用debug模式调试一下,看看这两个方法的值是否符合数字格式;
2.或,再把数据转换为Double前,把两个方法的值打印到控制台看一下;这两个方法的值是否符合数字格式。
System.out.println(chuzu.getJiage());System.out.println(chuzu.getMianji());
作为检索条件,有时是可以不输入的,不输入时就没有该检索条件。
有时可能输入不是数字的值(输入错误)。
所以,在转换前需要判断下。
事例:
String jiageStr = chuzu.getJiage();
Double jiage = null;
if(jiageStr != null && jiageStr != ""){
if(isNumber(jiageStr)){
jiage=Double.parseDouble(chuzu.getJiage());
} else {
返回页面,要求用户输入正确的数字。
}
}
if(jiage != null){
作为检索条件设置。否则该字段不作为检索条件,检索时没有该条件。
}
private boolean isNumber(String str){
如果值为数字,返回true;
否者返回false;
}
sql='select * from A where 1=1 '
if(min!=null and min != '')
sql+= ' and price>min'
if(max!=null and max != '')
sql+= ' and price<max'
参数在使用时,要先判空
比如,你可以这样写:
StringBuffer sql=new StringBuffer("from TChuzu where 1 = 1");
if(StringUtils.isNotBlank(huxing)){
sql.append(" and huxing like %").append(huxing.trim()).append("%");
}
....
转double之前也要先判空
价格和面积都用两个字段保存。
例如:a.在前天取值的时候用,将价格和面积的之后隔开
b,在controller中取值的 时候。
String price = request.getParameter("price");//价格
String[] pricearr=oper.split("\;");
String price1=pricearr[0];
String price2=pricearr[1];
String measure = request.getParameter("measure ");//面积
String[] measure arr=oper.split("\;");
String measure1=measure[0];
String measure2=measure[1];
c。在写sql
select * from a where price BETWEEN price1 ON price2 and measure BETWEEN measure1 ON measure2