MyFaces 1.1.0(tomahawk)をS2JSFで使う (newspaperTable編2)

 ではでは、昨日の続き。
 昨日のようにただだらだら出してもしょうがないですね。せめて列と列の間に何かセパレータ(区切り)を入れたいものです。例えば縦棒「|」を入れてみましょう。それにはf:facetを使います。f:facetはJSFの各UIコンポーネントで使われる「追加設定」的な意味を持つ汎用タグです。ですので、使用するときはname属性が必須です。列と列の間に文字を入れたいときは、「spacer」という属性値を与えます。下の例では、間にf:verbatimを使っていますが、バリューバインディングでもOKです。ただし、ただ何か書いただけでは適用されません(「この部分はtomahawkを使うためプレビューできません。」というのが無視されるのと同じです)。f:verbatimのタグにはさまれた内容はそのまま出力されてしまいますのでHTMLタグを自由に使えますが、タグの閉じ忘れやXSS脆弱性の作りこみに注意してください。

<html xmlns:m="http://www.seasar.org/maya" m:action="#{newspaperAction.initialize}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>newspaper</title>
</head>
<body>
  <div m:inject="t:newspaperTable" m:newspaperColumns="3"
    m:value="#{dtoList}" m:var="e">
    この部分はtomahawkを使うためプレビューできません。
    <div m:inject="f:facet" m:name="spacer">
      <span m:inject="f:verbatim">|</span>
    </div>
    <div m:inject="h:column">
      <span m:value="#{e.name}">県名</span>
    </div>
    <div m:inject="h:column">
      <span m:value="#{e.value}">県庁所在地</span>
    </div>
  </div>
</body>
</html>

各列に表題もつけられます。それぞれの列(h:column)にheaderの名前でf:facetで指定します。

<html xmlns:m="http://www.seasar.org/maya" m:action="#{newspaperAction.initialize}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>newspaper</title>
</head>
<body>
  <div m:inject="t:newspaperTable" m:newspaperColumns="3"
    m:value="#{dtoList}" m:var="e">
    この部分はtomahawkを使うためプレビューできません。
    <div m:inject="f:facet" m:name="spacer"><span m:inject="f:verbatim">|</span></div>
    <div m:inject="h:column">
      <div m:inject="f:facet" m:name="header">
        <span m:value="県名">県名</span>
      </div>
      <span m:value="#{e.name}">県名</span>
    </div>
    <div m:inject="h:column">
      <div m:inject="f:facet" m:name="header">
        <span m:value="県庁所在地">県庁所在地</span>
      </div>
      <span m:value="#{e.value}">県庁所在地</span>
    </div>
  </div>
</body>
</html>

これで出力されるのが↓です。だせぇ……



さて、この激しくダサい状態を打開するにはどうしたらいいか?
そうです。スタイルシートです。スタイルシートはt:newspaperTableをinjectしているダグに以下の属性で指定します。

属性名 意味
styleClass tableタグのclass属性
headerClass ヘッダ(thタグ)のclass属性
footerClass フッタ(thタグ)のclass属性
rowClasses 行(trタグ)のclass属性
columnClasses 列(tdタグ)のclass属性