[SFDC]apex:inputfieldタグ利用時にリードオンリー状態にしたい

Visualforceページでタグを使っていて、場合によっては入力欄をリードオンリー状態にしたいことがある。
新規登録時だけ入力可能で更新時は参照のみで入力不可にしたい時など。
タグのプロパティにはそれらしいのが無い。ググるとこちらのページがヒットした。
Javascriptを使って制御してやれば良いという。

inputfieldタグでidを指定しておくと$Component経由でHTMLレンダリング時の正確なidが取れる。
そのidからgetElementByIdでDOMアクセスしてdisable属性を立てるとグレーアウトされて編集不可になる。
「disabled = {!readOnly}」って感じでdisabledの設定値を変数にしてコントローラ側で制御することで、
冒頭で言ったような「新規登録/更新によって編集可能/不可を切り替える」動きが実現できる。

disabledではなくreadOnly属性を設定するやり方もありそうだけど、チェックボックスとかに効かないからよろしくないか。
どちらにしても、Apexの機能は何ら使わない言わば後付けな対処なのでちょっと気持ち悪くはある。
 
 
あるいはリードオンリーの場合は「apex:outputField」タグを利用する方法もある。

inputField、outputFieldともに’rendered’というレンダリングする/しないを制御する属性があるので、
この属性値をコントローラ側で制御することで同様の動きを実現できる。
disabledにして入力欄がグレーアウトされるより、outputFieldタグを使ってラベル表示にしたほうが見た目上も綺麗かも。


コメントを残す