[Seasar-user:2667] [S2JSF]action を起動したフォームのidをプログラムで取得するには?

O.K.U. oku
2005年 10月 7日 (金) 17:10:15 JST


O.K.U.です。毎度お世話になっております。
早速ですが、action を起動したフォームのidをプログラムで取得する方法はないでしょうか?
具体的には、

<form id="login">
  <input id="action" type="submit" m:action="#{loginAction.login}" value="ログイン" /><br />
  <span m:inject="h:message" m:for="action" />
</form>

としたときに、LoginAction.login() の中で、これを起動したアクションの id,
すなわち、"login:action" をプログラム上で取得する方法です。

以前お聞きした、

 [Seasar-user:2354] action からのエラーメッセージの表示について教えてください。

で、actionプログラムから、狙った位置にエラーメッセージを表示できるように
なったのですが、うまくいくと、さらに欲がでてきてしまいました。(^^;)

前回 [Seasar-user:2361] で書きましたように、プログラム側で
id = "login:action"; といった文字列を指定して、context.addMessage(id, ...);
としてメッセージを狙った位置に表示することができましたが、
これをできれば、プログラム側で "login:action" といった固定の文字列を書かずに、
html上に書かれた id をプログラムで取得することで、プログラムの変更なしで、
デザイナが自由に id 名をつけられるようにしたいのですが、難しいでしょうか?

デバッガで見るぶんには、LoginAction.login() が起動されたところで、
FacesContext.getCurrentInstance()で取得した contextに含まれる、
S2UIViewRoot の events の中に、ActionEvent が格納されていて、
そこの _clientId が求めている文字列かとは思うのですが、
外からこれを参照する方法を見つけることができませんでした。

それに events が参照できたとしても、本当にここの参照でいいのか?
又、私が確かめたときには、events に登録されている ActionEvent は
一つだけでしたが、もしも二つ以上登録されていたら、どれが自身の
ActionEventと判断するのか? も分からず断念しました。

当面は id名 はプログラマがデザイナに指定する方向でいこうとおもいますが、
もし解決手段があれば教えてください。




Seasar-user メーリングリストの案内