我在最后一年的项目(Maven + Hibernate + Spring + Tapestry)上遇到了与Tapestry相关的问题。我希望有人可以提供帮助。 我在我的服务层上生成了一个XML文件(其内容是我创建的自定义格式的MySql DB数据)(我尝试了它并且它是正确生成的:它是工作)。我从Junit测试中测试了它。问题是我无法使用Tapestry 从视图层开始工作。
I tried this but unsuccessfully 我认为这是因为文件已经不存在了:当用户点击“下载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 from this link相同。这里是源代码:
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";
}
}
答案 0 :(得分:1)
只有页面可以在您的“页面”包中。将XMLAttachment类移动到不受tapestry管理的任何包(例如NOT base,components或pages)。
Tapestry在托管包上执行字节代码魔术,并使用特殊的类加载器加载它们,这与实用程序类不兼容等。