2014-10-09 2 views
0

Я пытаюсь отобразить CSV-файл в форме HTML, я решил использовать CSVToTable jquery, но если есть более простой способ сделать это, пожалуйста, дайте мне знать.Как преобразовать CSV в таблицу HTML из java

Я читал, что я не могу просто попросить пользователя выбрать их файл и затем визуализировать его, я должен сначала загрузить файл на сервер, поэтому я добавил страницу jsp для получения файла, и я написал класс Struts Action для получить файл.

loadFile.jsp:

<form name="myForm" method="POST" action="/importAction.do" enctype="multipart/form-data"> 
    <input id='fileId' type='file' name='attachmentFile' value='' maxlength='255'/> 
    <input type="submit" value="Submit"/> 
</form> 

Мой importAction Действие Класс:

public ActionForward doAction(ActionMapping mapping, ActionForm actionForm, 
     HttpServletRequest request, HttpServletResponse response) throws Exception { 
    //how do i get the file and output this to the jsp? 

    return mapping.findForward("renderCSV"); 
} 

У меня также есть целевой JSP со следующим:

renderCSV.jsp:

<div id="CSVTable"></div> 

<script> 
    $(function() { 
     $('#CSVTable').CSVToTable('test.csv'); 
    }); 
</script> 

Итак, два q uestions из вышеуказанного кода:

1) Как получить этот файл из JSP в моем классе java, чтобы передать его JSP, который будет его отображать?

2) В renderCSV.jsp Как передать файл, который я получил в своем классе действий в CSVToTable? прямо сейчас у меня есть test.csv в качестве заполнителя.

Я открыт для других предложений. Заранее спасибо за помощь.

+0

Просто создайте действие, которое возвращает данные в формате CSV, а затем, в случае необходимости, передайте его в javascript. Большинство ppl сегодня используют формат JSON для этих целей. –

+0

Да, правильно, но как мне это сделать? как бы выглядела замена «test.csv» в jsp? как я могу получить вложение в Action и передать его как CSV? – Klam

ответ

0

Это пример действия getCSV, который получает файл CSV и выводит на него ответ.

public ActionForward execute (ActionMapping mapping, ActionForm form, 
    HttpServletRequest request, HttpServletResponse response) 
    throws Exception { 
    File file = new File("C:\\temp\\test.csv"); 
    FileInputStream fis = new FileInputStream(file); 
    OutputStream out = response.getOutputStream(); 

    byte[] buffer = new byte[4096]; 
    //copy binary data to response out 
    while(fis.read(buffer, 0, buffer.length) != -1) 
    out.write(buffer, 0, buffer.length); 
    out.flush(); 
    fis.close(); 
    return null; 
} 

Таким образом, вы можете использовать его в коде

<div id="CSVTable"></div> 

<script> 
    $(function() { 
     $('#CSVTable').CSVToTable('getCSV.do'); 
    }); 
</script> 

Для загрузки файла CSV чтения this примера.

+0

Спасибо, Роман, однако это не совсем трюк. Загрузка файла у меня есть в моем первом сообщении, я могу дойти до класса действия с файлом, я в порядке до этого момента. Поэтому я попробовал ваш класс действий, но все, что он делает, - это очистить CSV в одной строке на обновленной странице. Поскольку вы возвращаете null, renderCSV.jsp никогда не вызывается, поэтому jquery и все, что на этой странице никогда не вызывается, мне нужно передать его в CSVToTable. Может, я не понимаю? вы используете jQuery CSVToTable для вызова класса действия? как getCSV.do получает вызов класса действия, если он должен быть на кнопке отправки? – Klam

+0

CSVToTable использует ajax для получения данных из вышеуказанного действия, затем анализирует его и рисует таблицу. –

+0

Но ajax не может просто вызвать действие struts вроде этого, поэтому я не понимаю, как работает этот код. Прямо сейчас у меня есть: 1) loadfile.jsp отправляет файл, это вызывает класс действия. 2) Класс Action вызывает renderCSV.jsp и должен передать ему файл. 3) renderCSV.jsp запускает jquery и отображает csv в таблице. Но из вашего кода кажется, что renderCSV.jsp идет первым? то класс действия? как срабатывает класс действия? где загружается файл? в том же jsp, что и рендеринг csv? то как они соединяются? – Klam

Смежные вопросы