我的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";
}
当前流程:
<result name="save">/jsp/demo/demo.jsp</result>
我的要求:
saveTemplate()
。其实我试过用ajax,但那个按钮不起作用..
这就是我所做的:
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<sx:head />
(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" />
但此处按钮无效。什么也没发生。
有人可以帮忙吗?
答案 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:这将询问用户下载文件的位置。