我在最后一年的项目(Maven + Hibernate + Spring + Tapestry)中遇到了与 Tapestry 相关的问题。我希望有人可以帮忙。我在我的服务层上生成了一个 XML 文件(它的内容是我创建的自定义格式的 MySql DB 数据)(我尝试过它并且它是正确生成的:它正在工作)。我从我的 Junit 测试中对其进行了测试。问题是我无法使用 Tapestry 从视图层让它工作。
我试过这个但不成功 我认为这是因为文件不存在:当用户点击“下载 XML ”链接时,它是动态生成的。
这是我的源代码(用户单击指向此页面的链接)。页面的 POJO(xmlService.exportXml是我的服务层创建 XML 文件的方法):
public class DownloadAll {
@Component
private Form xmlDownloadForm;
@Property
private File xmlFile;
@Property
@SessionState(create=false)
private UserSession userSession;
@Inject
private XmlService xmlService;
public StreamResponse onSubmit() {
xmlFile = xmlService.exportXml(userSession.getUserProfileId());
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
InputStream input = DownloadAll.class.getResourceAsStream("exportedData-"
+ userSession.getLoginName() + timeStamp + ".xml");
return new XMLAttachment(input);
}
}
这是页面模板:
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
t:type="Layout" t:pageTitle="title"
xmlns:p="tapestry:parameter"
t:menuExplanation="menuExplanation">
<form t:type="Form" t:id="xmlDownloadForm">
<input type="submit" value="${message:download}"/>
</form>
</html>
有人知道如何使它工作吗?谢谢并恭祝安康。
编辑:当我提交表单但未提供文件时,会生成文件(我可以在文件夹中看到它)。我收到了这个错误:
org.apache.tapestry5.runtime.ComponentEventException 类 es.udc.decompras.web.pages.xml.util.XMLAttachment 已被转换,可能无法直接实例化。
XMLAttachment与此链接中的 JPEGAttachment.java相同这是源代码:
public class XMLAttachment extends AttachmentStreamResponse {
public XMLAttachment(InputStream is, String args) {
super(is, args);
this.contentType = "application/xml";
this.extension = "xml";
}
public XMLAttachment(InputStream is) {
super(is);
this.contentType = "application/xml";
this.extension = "xml";
}
}