如何使用保存文件而不刷新页面?

时间:2013-06-13 10:29:45

标签: ajax jsp struts2

我的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. 我提供的路径类似于&#34; C:/temp/abc.xml"
  2. 点击保存。
  3. 转到操作类方法saveTemplate()并保存文件。并返回&#34;保存&#34;
  4. 将从<result name="save">/jsp/demo/demo.jsp</result>
  5. 重定向到同一页面

    我的要求:

    1. 我提供的路径类似于&#34; C:/temp/abc.xml"
    2. 点击保存。
    3. 如果没有页面刷新,则需要点击操作类方法saveTemplate()
    4. 其实我试过用ajax,但那个按钮不起作用..

      这就是我所做的:

      1. 已添加<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
      2. 已添加<sx:head />
      3. 这部分我很困惑:我试过
      4. (a)<s:submit value="Save" method="saveTemplate" theme="ajax" /> 但是这里显示错误:&#34; FreeMarker模板错误!表达参数.pushId在模板/ ajax / submit.ftl第103行第6行未定义。&#34;

        (b)<sx:submit value="Save" method="saveTemplate" />但此处按钮无效。什么也没发生。

        有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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。

顺便说一下,如果操作已成功执行,您必须通知用户,然后使用iframe接收带有ok或ko消息的JSP片段...

这只是在不刷新页面的情况下调用Actions的几种方法中的一种,这取决于你......

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

然后你需要改变范式; 使用返回Stream结果的Action,内容处理:attachment:这将询问用户下载文件的位置。

Read this too.