2013-06-13 300 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. 单击保存。
  3. 转到操作类方法saveTemplate()并保存该文件。并返回 “保存”
  4. 将重定向到同一页面,因为<result name="save">/jsp/demo/demo.jsp</result>

我的要求:

  1. 我提供诸如路径为 “C:/temp/abc.xml”
  2. 点击保存。
  3. 没有页面刷新,它需要击中动作类方法saveTemplate()

其实我已经尝试过阿贾克斯,但按钮不起作用..

这是我做过什么:

  1. 新增<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
  2. 新增<sx:head />
  3. 这部分我是困惑:我试过

(a)<s:submit value="Save" method="saveTemplate" theme="ajax" /> 但这里显示错误:“FreeMarker模板错误!表达式parameters.pushId在模板/ ajax/submit.ftl的第103行第6列未定义。 (b)<sx:submit value="Save" method="saveTemplate" />但这里按钮不起作用。什么都没有发生。

任何人都可以帮忙吗?

+0

使用Ajax请求。 –

+0

使用这个插件http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/ – Rab

+0

@AleksandrM我更新与我有什么用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> 

而且您可以从Action中返回NONE。

顺便说一句,你将有如果操作已成功执行或不通知用户,然后使用iframe来接收JSP代码片段,其中确定或KO消息...

这只是几个ONE无需刷新页面即可调用操作的方式,这取决于您...

但是您的操作代码在您的服务器上执行,而不是在您的客户端上执行。

然后,你需要改变范式; 使用返回流的结果,与内容处置的动作:附件:这将询问用户下载该文件。

Read this too.

+0

任何其他方式不使用iframe。 – abyin007

+1

@ abyin007当然,使用Flash。 –

相关问题