Использование Groovy для сортировки таблицы HTML по датам lastModified () - PullRequest
1 голос
/ 03 августа 2011

У меня есть скрипт groovy, который извлекает несколько полей из базы данных MYSQL и вставляет данные в таблицу HTML, а также я нахожу дату lastModified() файлов, которые извлекаются в базу данных.

Я нашел довольно похожую тему: «Сортировка файлов по lastModified ()», однако моя проблема в том, что я никогда не получаю данные в карту или список, вместо этого я строю xml и вызываю запрос, используя sql.eachRow(query), чтобывставьте правильные поля в таблицу и затем найдите дату lastModified() в самом xml.

Я не могу выполнить сортировку в своем запросе, потому что мне нужно получить дату lastModified() из скрипта groovy,Таким образом, у меня есть два вопроса, возможно ли выполнить сортировку по дате последнего изменения, используя настройки в моем коде, который я разместил?И если да, то где мне нужно будет выполнить сортировку, чтобы она правильно сортировалась в таблице HTML?Я должен сказать, что я очень плохо знаком с Groovy и Java и ужасен, когда дело доходит до попыток выяснить подобные вещи, поэтому любые намеки на то, где вы нашли эту информацию, были бы хорошими.

Подобные темы, ноте, которые не совсем то, что я ищу:

Мой код, мне пришлось изменить некоторые вещи:

sql = Sql.newInstance("location of database", "username", "password", "driver")
writer = new StringWriter()
def xml = new MarkupBuilder(writer)
rptDate = new java.util.Date()

query = 
"""
query stuff
"""
xml.html(){
xml.head(){
xml.title("Title")
xml.body(){
    xml.h1("Title")
    xml.table(border:1, cellpadding:5){
        xml.tr(){
            xml.th("ID")
            xml.th("Date Added")
            xml.th("Hospital Name")
            xml.th("Total Daily Clients")
            xml.th("Total Daily Pets")
            xml.th("Last Upload Date")//lastModified() date

            }//end headings

//insert data from query into each row of the table
    sql.eachRow(query)
      {row ->
         xml.tr(align:'center'){
            xml.td("${row.ID}")
            xml.td("${row.DateAdded}")
            xml.td("${row.HospitalName}")
            xml.td("${row.TotalDailyClients}")
            xml.td("${row.TotalDailyPets}")
                        //find lastModified() dates for incoming files and format them
            mod = new File("/home/me/folderforfiles/${row.ID}.zip").lastModified()
            fd = new Date(mod).format("EEE MMM dd hh:mm:ss a yyyy")
                       //insert into table
            xml.td(fd)
        }//end table data
    }//end loop
}//end table
}//end body
}//end title
}//end html
println writer.toString()

1 Ответ

2 голосов
/ 03 августа 2011

Если вы сначала загрузите результаты SQL в List, то сможете отсортировать эту карту и выполнить итерацию по ней, чтобы сгенерировать XML:

sql = Sql.newInstance("location of database", "username", "password", "driver")
writer = new StringWriter()
def xml = new MarkupBuilder(writer)
rptDate = new java.util.Date()

query = 
"""
query stuff
"""

// Load the results into a list
List rows = sql.rows( query )

// Then manipulate the list to add the mod and fd fields
rows.collect { 
  mod = new File("/home/me/folderforfiles/${row.ID}.zip").lastModified()
  fd  = new Date(mod).format("EEE MMM dd hh:mm:ss a yyyy")
  it << [ mod:mod, fd:fd ]
}

// Then sort it based on this field
rows = rows.sort { it.mod }

xml.html(){
  head {
    title "Title"
  }
  body {
    h1 "Title"
    table(border:1, cellpadding:5) {
      tr {
        th "ID"
        th "Date Added"
        th "Hospital Name"
        th "Total Daily Clients"
        th "Total Daily Pets"
        th "Last Upload Date"
      } //end headings
      rows.each { row ->
        tr( align:'center' ) {
          td row.ID
          td row.DateAdded
          td row.HospitalName
          td row.TotalDailyClients
          td row.TotalDailyPets
          td row.fd
        }//end table data
      }//end loop
    }//end table
  }//end body
}//end html
println writer.toString()

Я не пробовал, но этодолжен делать то, что вы хотите ... Дайте мне знать, если у вас появятся какие-либо ошибки, и я их исправлю ...

Конечно, загрузка всех строк в память не будет работать, если у вас естьтысячи и тысячи строк ... Если это так, то вам следует сохранить дату lastModified в базе данных и отсортировать результаты с помощью SQL-запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...