私は、Plone Web サイト内で実行されるアプレットに取り組んでいます。Plone によって管理されているページの 1 つで、次の手順を実行するこのアプレットを実行する必要があります。
高度なフォーム検証
サーバーのハードディスク上のExcelテンプレートを取得し、一部のデータを名前として追加してコピーします(calcoloOneri.xlsがcalcoloOneriJohnFileOne.xlsになるように)
新しく作成されたファイルにフォームデータを書き込みます
このファイルを、Excel を PDF に変換するために作成した Web サービスに送信します
ユーザーが自分のマシンにPDFをダウンロードできるようにします
ここでの問題は、さまざまな Web サイトの複数のインスタンスが、名前とその他のわずかな点だけが異なる可能性があるため、アプレットをパラメーター化して、これらのさまざまなシナリオのそれぞれに実行することです。template.xls ファイルの場所には特に注意を払いましたが、サイトの構造やファイル名の必要性によって異なる場合があります。アプレットをロードするコードは次のとおりです (ロードされたページから取得)。
<script src="http://www.java.com/js/deployJava.js"></script>
<script>var user='admin'</script>
<script>var comune='Andria'</script>
<script>var numPratica=''</script>
<script>var numPreinoltro='20482109022013'</script>
<script>var classifica=''</script>
<script>var numFascicolo=''</script>
<script>var annoFascicolo=''</script>
<script>var portalURL='http://xx.xx.xx.xx:xxxx/scia2'</script>
<script>
var attributes = {code:'geotel.gui.Login.class', archive:'portal_url/++resource++java/GestioneOneri.jar, portal_url/++resource++java/mysql-connector-java-5.1.20-bin.jar, portal_url/++resource++java/poi-3.8-20120326.jar, portal_url/++resource++java/forms-1.3.0.jar', width:1024, height:700};
var parameters = {jnlp_href:'portal_url/++resource++java/gestioneoneri.jnlp', nomeUtente:user, integrato:'true', portalUrl:portalURL, comune:comune, percorsoFileCalcoloOneri:'/++resource++java/', nomeFileCalcoloOneri:'calcoloOneri.xls', numPreinoltro:numPreinoltro, numPratica:numPratica, classifica:classifica, numFascicolo:numFascicolo, annoFascicolo:annoFascicolo};
var version = '1.6';
deployJava.runApplet(attributes, parameters, version);
</script>
<noscript>
Niente plugin java!
</noscript>
Plone のドキュメントから読んだように、++resource++ 構文により、CMS は xml レジストリに登録されている静的リソースを取得できます。それを plone .pt ファイルに使用しても問題はありません。
それで、すべて読んだ後、私は自分のブラウザに向かい、次のように書きます。
http://xx.xx.xx.xx:xxxx/scia2/++resource++java/calcoloOneri.xls
Chrome は calcoloOneri.xls ファイルをダウンロードするので、「私は正しい方向に進んでいるに違いない」と思います。
これらの値をアプレットに渡すと、問題が発生します。まず、このアプレットを実行するサイトを複数持つことができるため、その Web サイトのアドレスをパラメーター (portalUrl) として取得します。Excel ファイルの場所を取得するために、ポータルの URL に ++resource++java/calcoloOneri.xls を追加します。これは、ブラウザーではこのアドレスが正しいためです。
私の copyFile メソッドでは、次のオブジェクトを使用して Excel テンプレートを新しいテンプレートにコピーします。
File f1 = new File(srFile); //srFile is "http://xx.xx.xx.xx:xxxx/scia2/++resource++java/calcoloOneri.xls"
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
}
in.close();
out.close();
java.io.File がこの種の URL を処理できないことや、アプレット コードで URL または URI オブジェクトを使用してそのファイルへのポインタを取得できないことを肌で経験しました。
テンプレートをアプレットに読み込むための正しい文字列を取得するにはどうすればよいですか? 私は何が欠けていますか?
ありがとうございました