[mayaa-user:792] Re: mayaaプロセッサが当てられているタグ名を知りたい
かとちん@mayaa-ml
[E-MAIL ADDRESS DELETED]
2009年 5月 29日 (金) 12:57:24 JST
加藤です。
マニアックな使い方ではありますが、
スクリプトから「originalNode.QName.localName」で、タグ名が参照できます。
ただし、その時点で参照可能な直近の対象ノードであることに注意する必要があります。
beforeRender内などでは正しい結果が得られません。
また、「originalNode」だけ書いてしまうと、現行の1.1以降の全てのバージョンで、
最適化機能が有効な場合(デフォルト設定)に、無限ループするという不具合が見つかっております。
この問題に対しては先ほど対策し、SVNのリビジョン(3440以降)で修正済みです。
「originalNode」だけ書くということをしない限りは、現行リリースバージョンでも
問題ないと思います。
この originalNode は何者か?という点ですが、
mayaaのソースに含まれる、org.seasar.mayaa.cycle.ServiceCycle インターフェースの
getOriginalNode() メソッドに当たります。
ServiceCycleインスタンスはページスコープ上に浮いています。
幾つかのメソッドは、プロセッサがネストするごとに異なる内容を返します。
mayaaのドキュメントに記述している、グローバル関数の幾つかもServiceCycleインスタンスの
メソッドで提供されています。
rhinoは、Javaオブジェクトのアクセッサをフィールドのように参照するので、
originalNodeは、(ServiceCycleのインスタンス).getOriginalNode() が呼ばれます。
「getOriginalNode().getQName().getLocalName()」でもタグ名の参照が可能です。
ただ、長くなるだけですので冒頭にあげた記述の方が良いでしょう。
おまけとして、対象HTMLタグの属性を取得する方法も以下に示します。
--------
<m:beforeRender>
<![CDATA[
var QNameImpl =
Packages.org.seasar.mayaa.impl.engine.specification.QNameImpl;
function getHtmlAttribute(htmlNode, name) {
var attr = htmlNode.getAttribute(
QNameImpl.getInstance(htmlNode.QName.namespaceURI, name));
if (attr != null) {
return attr.value;
}
return undefined;
}
]]>
</m:beforeRender>
<m:write id="write"
value="${
originalNode.QName.localName
+ ' class='
+ getHtmlAttribute(originalNode, 'class') }"/>
--------
> お世話になっておりますsusukiです。
>
>> これだと代替手段はありませんね。
> 了解しました。
>
>> ただ、タグの種類が異なるのであれば、プロセッサは別にする方が
>> 自然だと思います。
> テンプレートHTMLは開発者ではない人が作ることを想定しています。
> テキストボックスとテキストエリアに初期表示をするのは
> 画面表示的には同じように見えるので
> 同じidでできた方が親切かなと思い、mayaaプロセッサで違いを
> 吸収してあげたかったというのが目的でした。
> でもプロセッサは分けていきたいと思います。
> テンプレート作成者に少し注意して頂ければ済みますし。
>
>> HTML の id は、複数のタグで同じ値を持つことを許していませんので、
>> m:id を使うようにした方が良いかもしれません。
>>
>> バリデーションにひっかかる、JavaScript から id 指定で呼べない、
>> くらいの問題があります。
> ありがとうございます。
> 検討してみます。
>
>
> 迅速で丁寧な対応で助かりました!
> また何かありましたらよろしくお願いします!
>
> 以上です。
>
>> suga です。
>>
>> 2009/5/26 [E-MAIL ADDRESS DELETED] <[E-MAIL ADDRESS DELETED]>:
>>>> どういった場合にタグ名を取得したいのでしょうか。
>>>> 場合によっては代替手段があるかもしれません。
>>> inputタグでもTEXTAREAタグでも、同じid設定で
>>> 初期表示を行いたいのです。
>>>
>>> inputタグとTEXTAREAタグでは初期表示させる場合
>>> Mayaaプロセッサの書き方が変わりますので
>>> プロセッサ内でタグ名を取得して分岐する必要が
>>> あると考えました。
>>> ドキュメントにはそれらしい使い方が
>>> 載っていなかったので質問させて頂いた次第です。
>> これだと代替手段はありませんね。
>>
>> ただ、タグの種類が異なるのであれば、プロセッサは別にする方が
>> 自然だと思います。
>> (もうちょっと広い範囲が分かると意見が変わるかもしれませんが)
>> 値を取得するのに記述が多いような場合は、beforeRender でまとめて
>> おくか、Java でユーティリティを作るかすると良いでしょう。
>>
>>
>> 余談ですが、
>>
>>> ***********HTMLコード***********
>>> <input type="text" id="setDefaultValue" />
>>>
>>> <TEXTAREA id="setDefaultValue"></TEXTAREA>
>> HTML の id は、複数のタグで同じ値を持つことを許していませんので、
>> m:id を使うようにした方が良いかもしれません。
>>
>> バリデーションにひっかかる、JavaScript から id 指定で呼べない、
>> くらいの問題があります。
>>
> _______________________________________________
> mayaa-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/mayaa-user
>
mayaa-user メーリングリストの案内