0

我的 JSP 页面有如下条目:

演示.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()

其实我试过用ajax,但那个按钮不起作用..

这就是我所做的:

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

(a)<s:submit value="Save" method="saveTemplate" theme="ajax" /> 但这里显示错误:“FreeMarker 模板错误!表达式参数.pushId 在模板/ajax/submit.ftl 中的第 103 行第 6 列未定义。”

(b)<sx:submit value="Save" method="saveTemplate" />但这里的按钮不起作用。什么都没有发生。

任何人都可以帮忙吗?

4

1 回答 1

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 的几种方法之一,这取决于您...

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

然后你需要改变范式;使用返回 Stream 结果的操作,内容处置:附件:这将询问用户在哪里下载文件。

也读这个。

于 2013-06-13T11:44:30.933 回答