2013-06-13 2 views
0

Моя страница JSP есть запись, как:Как сохранить файл без обновления страницы?

demo.jsp:

<s:form action="demo" theme="simple"> 
    Enter the location and filename for template to be saved (eg: C:\temp\a.xml) 
    <s:textfield name="fileLoation" id="FileLoationID" /> 
    <s:submit value="Save" method="saveTemplate" /> 
</s:form> 

struts.xml:

<action name="demo" class="com.test.action.DemoAction" > 
    <result name="preview">/jsp/demo/preview.jsp</result> 
    <result name="save">/jsp/demo/demo.jsp</result> 
    <result name="success">/jsp/demo/demo.jsp</result> 
    <result name="error">/loginError.jsp</result> 
</action> 

класса действия:

public String saveTemplate() { 

     try { 
      previewTemplate(); 
      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer = transformerFactory.newTransformer(); 
      transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
      transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");    
      DOMSource source = (DOMSource) animalTemplateDetails.get("xmlStringDOMSource");   

      File file = new File(fileLoation); 
      file.getParentFile().mkdirs(); 

      StreamResult result = new StreamResult(file); 

      transformer.transform(source, result); 

     } catch (TransformerException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return "save"; 
    } 

Текущий процесс:

  1. Я предоставил путь как "C: /temp/abc.xml"
  2. Нажмите save.
  3. Перейти к методу класса действий saveTemplate() и сохранить файл. И возвращается "сохранить"
  4. будет перенаправлять на одной странице, так <result name="save">/jsp/demo/demo.jsp</result>

Мое требование:

  1. я представил путь "C: /temp/abc.xml"
  2. Нажмите кнопку Сохранить.
  3. Без обновления страницы необходимо набрать метод класса действий saveTemplate().

На самом деле я попытался с помощью AJAX, но эта кнопка не работает ..

Это то, что я сделал:

  1. Добавлено <%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
  2. Добавлено <sx:head />
  3. Эта часть я confused: я попытался

(a) <s:submit value="Save" method="saveTemplate" theme="ajax" /> , но здесь отображается его ошибка: «Ошибка шаблона FreeMarker! Параметры выражения.pushId не определены в строке 103, столбец 6 в шаблоне/ajax/submit.ftl».

(b) <sx:submit value="Save" method="saveTemplate" />, но здесь кнопка не работает. Ничего не происходит.

Может ли кто-нибудь помочь?

+0

запрос Использование Ajax. –

+0

использовать этот плагин http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/ – Rab

+0

@AleksandrM i обновил вопрос с помощью того, что я пробовал с ajax. – abyin007

ответ

0
<s:form action="demo" theme="simple" target="foo"> 
    Enter the location and filename for template to be saved (eg: C:\temp\a.xml) 
    <s:textfield name="fileLoation" id="FileLoationID" /> 
    <s:submit value="save" method="saveTemplate" target="foo" /> 
</s:form> 

<iframe style="display:none" name="foo"> 
    This is an hidden iframe targeted by the form to 
    avoid page refresh and new page/tab opening 
</iframe> 

И вы можете вернуть NONE из Action.

Btw вы должны уведомить пользователя, если операция была выполнена успешно или нет, а затем использовать IFRAME, чтобы получить фрагмент кода JSP с ОК или ко-сообщение ...

Это только один из нескольких способы позвонить, не обновляя страницу, это зависит от вас ...

Но код вашего действия выполнен на вашем СЕРВЕР, а не в вашем КЛИЕНТЕ.

Затем вам нужно изменить парадигму; используйте действие, которое возвращает результат Stream, с содержимым-распоряжением: вложение: это спросит пользователя, где загрузить файл.

Read this too.

+0

любые другие способы без использования iframe. – abyin007

+1

@ abyin007 Конечно, используйте Flash. –