読者です 読者をやめる 読者になる 読者になる

non webwork taglib

Mayaa標準タグで、各部品をコンポーネントとして作っておけば再利用できる。
いやぁ、Mayaaってよくできてるなぁ。


下記のように書いた場合、当然エラーとなります。
コンポーネントに渡したリストにアクセスするキーを渡してるのですが、
どうやってアクセスすればいいんでしょう?

target.mayaa
<m:insert path="/component.html"
 list="list" listKey="id" listValue="name" />

component.mayaa
<m:forEach items="${binding.list}" var="item">
  <m:write value="${item.binding.listKey}" />  << ここ
  <m:write value="${item.binding.listValue}" />  << ここ
</m:forEach>


追記

<m:forEach items="${binding.list}" var="item">
 <m:write value="${Packages.org.apache.commons.beanutils.BeanUtils.getProperty(item,binding.listKey)}" />
  <m:write value="${Packages.org.apache.commons.beanutils.BeanUtils.getProperty(item,binding.listValue)}" />
</m:forEach>

で、できました。


でも、値を参照する度に毎回書くのも嫌なので、一時変数に入れたいんだけど、

<m:with>
<m:forEach items="${binding.list}" var="item">
<m:exec script="var listKey = Packages.org.apache.commons.beanutils.BeanUtils.getProperty(item,binding.listKey)" />
 <m:write value="${listKey}" />
</m:forEach>
</m:with>

と書いても変数が見えてない。
うーんどうすればいいんだろ。リファレンスを見るとボディ内であれば使用できるようだけど、withを使用してるからね。


結論

${item[binding.listKey]}

で、できる。