1

最終年度のプロジェクト (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";
    }
}
4

1 に答える 1