Java EE 6 / JSF 2.0 で。
(追記:どうやらJSFの実装がMyFacesだとこの現象が出るようですね。
Mojarra(Wildfly)では出ませんでした。id:kikutaro777さんありがとうございます!)
<input id="j_id425786386_6463da65:userName" ~~>
みたいにformIdとidが:(コロン)で句切られてレンダリングされるんで
jQueryのセレクタだとエスケープしなくちゃでちょっと面倒。
そこで、よくある解決策の1つにweb.xmlに
<param-name>javax.faces.SEPARATOR_CHAR</param-name>
<param-value>-</param-value>
</context-param>
を書くってやつです。
h:formにprependId="false"を指定したりもしますよね。
問題はその後。
画面の開発ですとだいたいテンプレ化されているので
<ui:include src="~~~" />
</ui:insert>
<main>
<h:form id="main-form">
<ui:insert name="~~~" />
</h:form>
</main>
みたいな感じになってるかとは思います。
メインのコンテンツだけh:formで囲うって感じですね。
一方navではグローバルに遷移できるメニューを表示しますが
ここでログアウト(処理)など、ただのリンクではなく
actionを伴う処理を書きたい場合はこうしているかと思います。
commandLink生成のためにformで囲いますね。
この場合にどうもactionが呼ばれないという事態にアタリまして
・h:commandButton ならaction呼ばれる
・SEPARATOR_CHARを指定しない場合なら呼ばれる
ということでこれはどうもJSFの挙動がアヤシイなってことで
web.xmlのSEPARATOR_CHARの指定をやめて、
formでは
と生成することにしましたとさ。
環境
Rational Application Developer 8.5.5 / WebSphere 8.5.0.1 / Java EE 6
JSFが生成するidあれこれについてはid:kikutaro777さんのこちらの記事もどうぞ!
単にcommandLink/commandButtonとかajaxが動かんって人は
BalusC先生が回答しているStackOverflowも参照してみて下さい。