JSF <h:commandLink>
(<a>
のonclick
イベントを使用して現在のフォームを送信する)がある場合、JavaScriptをどのように実行しますか(削除の確認を求めるなど)。実行されているアクション?
_<h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}">
<h:outputText value="#{msgs.deleteText}" />
</h:commandLink>
<script type="text/javascript">
if (document.getElementById) {
var commandLink = document.getElementById('<c:out value="${myPageCode.myCommandLinkClientId}" />');
if (commandLink && commandLink.onclick) {
var commandLinkOnclick = commandLink.onclick;
commandLink.onclick = function() {
var result = confirm('Do you really want to <c:out value="${msgs.deleteText}" />?');
if (result) {
return commandLinkOnclick();
}
return false;
}
}
}
</script>
_
他のJavascriptアクション(フォーム入力の検証など)は、confirm()
の呼び出しを別の関数の呼び出しに置き換えることで実行できます。
このように簡略化できます
onclick="return confirm('Are you sure?');"
これは私のために働いた:
<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"
id="newibutton"
onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;"
value="#{bundle.NewPatient}"/>
Onclickは引き続き使用できます。 JSF レンダリングキットの仕様 (エンコード動作を参照)は、リンクがそれを処理する方法を説明します。重要な部分(onclickに対してレンダリングされるもの)は次のとおりです。
var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();
したがって、関数にはイベントオブジェクトが渡されませんが(とにかくクロスブラウザーでは信頼できません)、true/falseを返すと、送信が短絡します。
フォームが投稿される前に何かを実行したい場合、たとえば確認のために、フォームイベントonSubmitを試してください。何かのようなもの:
myform.onsubmit = function(){confirm("really really sure?")};
var deleteClick;
var mess="xxx";
function assignDeleteClick(link) {
if (link.onclick == confirmDelete) {
return;
}
deleteClick = link.onclick;
link.onclick = confirmDelete;
}
function confirmDelete() {
var ans = confirm(mess);
if (ans == true) {
return deleteClick();
} else {
return false;
}
}
このコードをjsf1.1に使用します。
JSF 1.2では、onclickイベントを指定できます。
また、 MyFaces や IceFaces などの他のライブラリは、「onclick」ハンドラーを実装しています。
次に行う必要があるのは、単純に次のとおりです。
_<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />
_
注:return confirm(...)
を実行すると、onClickイベントの残りのJavaScriptがブロックされ、ユーザーが何を返してもアクションが効果的に停止するため、実行することはできません。
これは私にはうまくいきませんでした、
onclick="if(confirm('Are you sure?')) return false;" />
しかし、これはしました
onclick="if(confirm(\"Are you sure?\"))return true; else return false;"