将List拆分成更小的部分(可能使用wicket)

时间:2014-09-16 10:58:20

标签: java list hashmap nested wicket

我创建了一个从属性文件中加载查询的应用程序,例如SELECT * FROM DATA。然后,每次在每行中加载所有这些数据。我们第一次采取id,name,phone,bday和division这样的行,并将其放入名为标题的列表中。然后我们将它自己的数据放入一个名为记录的列表中。在那之后,我们看过头条新闻,只是将我们的数据继续加载到我们的记录列表中。

当我们使用wicket为我们显示表中的数据时,结果如下: http://i.imgur.com/d0Gsnr2.png

如您所见,它只打印出包含所有数据的整行。根据头条新闻,我们希望所有数据都有单独的列。所以它应该类似于:

ID - NAME - PHONE - BDAY - DIVISION

123 - JOE - 10351053 - 20-12-2012 - EAST。

我们如何设法做到这一点?我们的代码如下:

public class DataHandlerImpl implements DataHandler {

private final DataService dataService = new DataService();
private final List<Object> records = new ArrayList<>();

@Override
public String getPropertyValue() {
    Properties prop = new Properties();
    String propFileName = "sqlQuery.properties";

    InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);
    loadInputStreamCatchIOException(prop, inputStream);
    fileNotFoundException(inputStream, propFileName);
    String result = prop.getProperty("sqlQuery");
    return result;
}

@Override
public Data getKeysAndValues() {
    String queryFromPropertyFile = getPropertyValue();
    List<HashMap<String, Object>> sqlQuery = dataService.getSqlQuery(queryFromPropertyFile);
    List<String> headlines = new ArrayList<>(sqlQuery.get(0).keySet());
    Collections.reverse(headlines);

    createListOfRecords(sqlQuery, headlines);

    return new DataImpl(headlines, records);
}

@Override
public int numberOfRecords() {
    return getKeysAndValues().getRecords().size();
}

private void loadInputStreamCatchIOException(Properties prop, InputStream inputStream) {
    try {
        prop.load(inputStream);
    } catch (IOException ex) {
        Logger.getLogger(DataHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private void fileNotFoundException(InputStream inputStream, String propFileName) {
    if (inputStream == null) {
        try {
            throw new FileNotFoundException("property file '" + propFileName + "
' not found in    the classpath");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(DataHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

private void createListOfRecords(List<HashMap<String, Object>>
sqlQuery, List<String> headlines)        {
    for (HashMap<String, Object> values : sqlQuery) {
        List<Object> newRow = new ArrayList<>();
        for (String record : headlines) {
            newRow.add(values.get(record));
        }
        records.add(newRow);
    }
}
}

public class SimpleDataView extends SimpleDataViewPage {

IModel ldm;

public SimpleDataView() {
    ldm = new LoadableDetachableModel<Data>() {

        @Override
        protected Data load() {
            DataHandlerImpl dataHandler = new DataHandlerImpl();
            return dataHandler.getKeysAndValues();
        }
    };
    add(new Label("size", "Number of records: " + getData().getRecords().size()));

    add(new Label("headlines", new Model<String>() {

        @Override
        public String getObject() {
            return getData().getHeaders().toString();
        }

    }));

    add(new Label("records", new Model<String>() {

        @Override
        public String getObject() {
            return getData().getRecords().toString();
        }

    }));
}
}

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">

<head>
    <meta charset="utf-8" />
    <title>Data presentation</title>
</head>
<body>
    <h3>Data</h3>
    <h4 wicket:id="size"></h4>
    <table border="1">
        <tbody>
        <thead>
        <td><a wicket:id="headlines" href="#">NAME</a></td>
</thead>
         <td wicket:id="records">
    </td>
    </tbody>


</table>
</body>
</html>

如果需要进一步的信息,请不要犹豫。

1 个答案:

答案 0 :(得分:2)

您可以使用DataTable,如下例所示:Wicket DataTable

DataTable可以包含任何列数,这些列作为列列表传递给DataTable。您可以定义每个列显示的内容。