■簡単なこと■
てな感じの罫線入った表を表示したいとします(今回はグラデーション入れませんが)。まぁ日本のWeb屋さんにはごく日常的な作業で、処理系によって違いはあるけど
- ループを回しながらコントロール・ブレークで行を出力していく
- 先にコントロール・ブレーク済みの行データを配列にいれておいて出力
のどっちかで対応しますわな。
Visualforceだとループ内側では動的な評価ができないので後者で作ります。作りました。
■Visualforce困ったちゃん■
で、分類と詳細の行はレイアウトが違うので、分類の行だったら分類用のタグ、詳細行には詳細用のタグ…を出力させます。
そのために多くのフレームワークには「この内側のタグsを出力するか否か」をスイッチする機能が用意されてます。史上最高のWebフレームワークたるWebObjectsにはWOConditionalがあって(以下長いので省略
しかし。
Force.comってかVisualforceにはありません。ので、<apex:include>とか<apex:component>などを用いてコンポーネントとして作った要素を埋め込みrenderedでon/offします。
これでHTMLを生成すると…見事に表が崩れます。ソースを読んでみると…componentの前後に勝手に<span></span>が挿入されており、結果として以下のようなソースが生成されてしまいます。
<Table>そりゃ崩れるわなorz。
<TR><SPAN><TH>品目</TH><TH>金額</TH></SPAN></TR>
<TR><SPAN><TD>Mac</TD><TD>128,000</TD></SPAN></TR>
</Table>
■しかし天才はいる■
で、困った時のGoogle先生ってことで apex:component span で検索してみたら、一発でworkaroundが見つかりました。「apex:component rendered in SPAN」、いやー、その手は思いつかなかった。まさに天才です。
さっそく実装してみたら、
<Table>
<TR>
<SPAN></SPAN>
<TH>品目</TH><TH>金額</TH>
<SPAN></SPAN>
</TR>
<TR>
<SPAN></SPAN>
<TD>Mac</TD><TD>128,000</TD>
<SPAN></SPAN>
</TR>
</Table>
となり、ブラウザ上では意図した通りの表示が出ました。
喜び勇んでrenderAs="PDF"を実行したら…。
…はい、終了。お疲れ様でした。まぁ、そらそうよね、<TR>の内側だしねorz
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。