我的grails应用程序从数据库中的csv文件导入数据。每个文件都包含有关办公室及其在一个月内实现的营业额的信息 用户输入的参数
用户可以选择单个航空公司(导入单个文件),否则,如果该字段留空,即它将导入该位置的所有航空公司
在逐行读取文件的过程中,会调用服务中的功能来查找办公室和代理商之间的对应关系。
问题:
如果用户选择导入单个航空公司(params.air!= null),则该函数返回一个真值, 但是如果他离开空领域航空公司而他选择导入所有文件,该函数总是返回null
控制器:
if (params.air=="null")
{
air = Airlines.list()
}
else
{
air = Airlines.get(params.air)
}
def period = Period.get(params.per)
def coo_file = Cooperation.get(params.coo)
air.each
{
def selected_airline = it
// search csv_file for airline selected_airline
....
// read csv_file
cvs_file.toCsvReader(['separatorChar':';']).eachLine { tokens ->
count_tokens++
....
def test_buro = fs.get_valid_buro(tokens[pos_iata],coo_file,period)
println(test_buro)
}
}
服务:
//function
Buro get_valid_buro(String agt,Cooperation coo,Period per)
{
Date per_end = per.end_date
Boolean found = false
Buro selected =null
def sql_query = "SELECT b.id FROM Buro as b,Buro_agency as ba, Agency as a WHERE b.id = ba.buro AND ba.agency = a.id AND a.id = "+Agency.findByNumber_agency(agt)
def data_sql = Data.executeQuery(sql_query)
def bur_serv = []
for(int i=0;i<data_sql.size(); i++)
{
bur_serv.add(Buro.get(data_sql[i]))
}
bur_serv.each{
Date open_date = it.open_date_buro
Date close_date = it.close_date_buro
Cooperation bur_coo = it.cooperation
if((bur_coo == coo && open_date <= per_end )&&(close_date>=per_end|| close_date==null))
{
found=true
selected = it
}
}
我调试应用程序时,如果((bur_coo == coo&amp;&amp; open_date&lt; = per)&amp;(close_date&gt; = per || close_date = = bur_coo == coo&amp;&amp; open_date&lt; = per)&amp;(close_date&gt; = per || close_date = = null))即使条件为真,它也会传递给下一次迭代!
出了什么问题?!
答案 0 :(得分:0)
通过我意识到的测试我发现问题是两个域类对象之间的比较&#34;合作&#34;。
当我测试条件时
if(bur_coo == coo)
它总是返回false,即使两者都是相同的值(具有相同的id)。
我google了如何比较两个域类我找到了运算符&#34; equals&#34;,我修改了代码
if (bur coo.equals (coo))
{
println("true")
}
else
{
println("false")
}
结果总是错误的。
<强>解决方案强> 我找到的解决方案是将他们的id与
进行比较if(bur_coo.id == coo.id)