-replace修正
replaceの件、duranさんの指摘で、IterationTag利用パターンでうまくなかったので、かなり副作用あるんじゃないかなと心配ながらTemplateImplをいじって対応しました。
org.seasar.maya.impl.engine.TemplateImpl#render()の該当部分 if(current.isIteration()) { afterRet = current.doAfterChildProcess(templateContext); TemplateProcessor parent = current.getParentProcessor(); if(parent instanceof ElementProcessor) { ElementProcessor element = element = (ElementProcessor)parent; if(element.isOriginal()) { if(afterRet == IterationTag.EVAL_BODY_AGAIN) { element.doEndProcess(templateContext); element.doStartProcess(templateContext); } } } }
doAfterChildProcessをやって後に、doEndProcess/doStartProcessという呼び順で、この上なく危険な香りがしますが、この要件はきっちり満たします。様子みないといけないです。
あと、replace="false"で出力されたタグはid属性を書き出さないようにしました。ループで用いられたりしたときに複数同じidが出力される可能性があるためです。これも設定項目にするかも。