У меня проблемы, связанные с Tapestry в моем проекте последнего года (Maven + Hibernate + Spring + Tapestry). Я надеюсь, что кто-то может помочь в этом. Я создаю XML-файл (его содержимое — мои данные базы данных MySql в специальном формате, который я создал) на своем сервисном уровне (я попробовал, и он правильно сгенерирован: он работает). Я проверил это из своих тестов 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";
}
}