本部長は管理ができない

Salesforceに関わっているエンジニアの技術メモ。ときどきそれ以外。

apex:commandLinkをボタン風に変更する

apex:commandButtonを使って別画面起動が出来なくて、苦肉の策でapex:commandLinkをボタン風にしてごまかした記録。

やり方は、スタイルで「btn」をあてる。
押下不可状態にしたければ、スタイルは「btnDisabled」となる。

<apex:commandLink value="commandLink" styleClass="btn" />
<apex:commandLink value="commandLink" styleClass="btnDisabled" />

これの結果。
f:id:gren_dken:20130905220111p:plain

これだけだと、リンクのアンカーラインが表示されてしまう。
なので、aタグに対してスタイルをあてる。

a{ text-decoration: none; }

これの結果。
f:id:gren_dken:20130905221117p:plain

しかし、まだ課題が。
カーソルをあてると、アンカーラインが表示される。色が変わる。
カーソルがキャプチャ出来ていないが、こんな感じ。
f:id:gren_dken:20130905221344p:plain

これの対応は少し面倒。

/* 押下可能ボタン */
a:link.lnk2btn{ text-decoration: none; color: black; }
a:visited.lnk2btn{ text-decoration: none; color: black; }
a:hover.lnk2btn{ text-decoration: none; color: black; }
a:active.lnk2btn{ text-decoration: none; color: black; }

/* 押下不可ボタン */
a:link.lnk2btnD{ text-decoration: none; }
a:visited.lnk2btnD{ text-decoration: none; }
a:hover.lnk2btnD{ text-decoration: none; }
a:active.lnk2btnD{ text-decoration: none; }

リンク先表示済みの場合など色が変わるので、それぞれのスタイルを作成する。
なお、上記順番で記述しないと反応しない。

押下可能可否でクラスを分けたのは、押下不可の場合、文字色を変えるため。黒ではおかしい。

そのため、apex:commandLinkの方も書き換える

<apex:commandLink value="commandLink" styleClass="btn lnk2btn" />
<apex:commandLink value="commandLink" styleClass="btnDisabled lnk2btnD" />


最後に、押下不可ボタンを押下したときに無反応にさせる。
onclickを追加する。

<apex:commandLink value="commandLink" styleClass="btn lnk2btn" />
<apex:commandLink value="commandLink" styleClass="btnDisabled lnk2btnD" onclick="return false;" />


元々がリンクであるため、縦に配置するとボタン同士がくっついたりするので、適宜調整は必要。