【Visualforce】csv出力で、出力ファイルにscriptが吐かれる。SfdcApp.Visualforce.viewstate.ViewstateSender.sendViewstate
VisualforceでCSV出力を作ろうとしていた時の話。
開発者ガイドの<apex:page>タグを見てみると、どうやらcontentType属性にcsvを指定すればできそう。さっそく簡単なサンプルを作って試してみたところ・・・
1 2 3 4 5 6 7 |
<apex:page contentType="text/csv#sample.csv" controller="SampleController" showHeader="false"> <apex:repeat value="{!dataListList}" var="dataList"> <apex:repeat value="{!dataList}" var="data"> {!data} </apex:repeat> </apex:repeat> </apex:page> |
ちなみにdataListListは空っぽの状態にしたので空のCSVファイルが出来るかな~と思いきや、出力されたcsvファイルに下記のscriptが吐かれました。
<script type="text/javascript"> SfdcApp.Visualforce.viewstate.ViewstateSender.sendViewstate('URL', 'VFページ名'); </script> |
ハテナ。色々試してみても一向に解消しない。ドハマリ・・・
で、何やかんややっている内に解決しました。コード自体は悪くなくて、どうも開発者コンソールのPreviewでページ出力すると上記のscriptが出てしまうみたいです。

前からちょっと気にはなっていたのですが、開発者コンソールのPreviewでVFページを表示すると、URLに下記パラメータがくっつきます。
?core.apexpages.request.devconsole=1 |
どうもこいつが悪さするみたいです。試しに上記パラメータを取っ払った状態(Previewボタンを押さずにURLをベタ書き)でcsv出力すると上記scriptタグは出ないです。
いやはや、まずはサンプルを作ってみようと慎重になってしまったが故に、本来ハマらなくてよいところでハマってしまいました・・検索しても全然ヒットしなかったので、かなり稀なハマり方かもしれません。というか、開発者コンソールのPreviewって、あまり使われていない・・??