t:dataTable の選択した行に基づいてボタンを無効にする必要があります。これは、行選択イベントで呼び出している JavaScript メソッドです (選択した行のアイテムにツールチップがある場合、ボタンを無効にする必要があります... 見苦しいですが、これが最も簡単な方法でした)。
function processUpdateButton() {
if (!$(".selectedRow").length
|| $(".selectedRow").children().find(".tooltip").length){
$(".Update").button({disabled:true});
} else {
$(".Update").button({disabled:false});
};
}
これは JSF コマンドリンクです。
<h:commandLink id="update" styleClass="Update iconButton"
action="#{myBB.update}"
value="#{gui['button.update']}"
tabindex="301"/>
ボタンに無効な属性を設定すると機能します。ボタンがグレー表示され、その上にマウスを置いても、他のリンクのようにカーソルが変化しません。問題は、まだクリックでき、バッキング Bean のメソッドが呼び出されることです。それを防ぐ方法はありますか?レンダリングされた無効化されたボタンは次のとおりです。
<a id="mainForm:update"
class="iconButton ... ui-button-disabled ui-state-disabled"
onclick="return myfaces.oam.submitForm('mainForm','mainForm:update');"
href="#" role="button" aria-disabled="true" disabled="disabled">
<span class="ui-button-text">Update</span>
</a>
おそらく onClick 属性を削除する必要がありますが、再度有効にする方法がわかりません。
もちろん、更新ボタンをクリックしてサーバーの状態を確認することもできますが、それは最後の手段です。サーバーを呼び出さずに、JavaScriptのみからJSFによって生成されたボタンを完全に無効にできればいいのですが。