複数のセクションが定義されたクライアント側のイメージマップを持つアプリケーションがあります。マネージドBeanのメソッドを<area>
onclick属性から呼び出す必要があります。
これは機能しません:
<area id="ReviewPerson" shape="rect" coords="3, 21, 164, 37" href="#"
onclick="#{personBean.method}" alt="Review Person" id="reviewPersonArea"
title="Review Person" />
(残念ながら)私の手はイメージマップに縛られているので、<area>
タグ内からマネージドBeanメソッドを呼び出すにはどうすればよいですか?
いくつかのオプションがあります。 JSF 2.0を使用している場合は、これらのエリアタグの周囲に複合コンポーネントを構築できます。
ただし、最も簡単な方法は、非表示のJSF入力ボタンを呼び出すことです。
<h:commandButton id="hdnBtn" actionListener="#{personBean.method}" style="display: none;" />
これにより、JavaScriptからアクセスしてそのinput
イベントを呼び出すことができるページ上のclick
HTML要素としてレンダリングされます。
onclick="jQuery('#form:hdnBtn').click();"
プライムフェイスを使用する場合、jqueryは必要ありません。 name属性を指定してremoteCommandを使用し、JavaScriptからその名前を呼び出すため、次のようになります。
<area... onclick="somejavascript();"... />
<p:remoteCommand name="myCommand" actionListener="#{personBean.method}" style="display: none;" />
JavaScript:
function somejavascript(){
myCommand();
}
完全なADF Facesソリューションが必要な場合は、これを試すことができます。
function doClick(){
var button = AdfPage.PAGE.findComponentByAbsoluteId("aButton");
ActionEvent.queue(button,true);
}
Seamを使用している場合、Remotingがこれを行います: http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/remoting.html
別のアプローチは、RESTサービスとしてメソッドを公開し、jQueryのようなものを使用してJavaScriptからそれらを呼び出すことです。このアプローチに関する良い記事を以下に示します: http:// coenraets。 org/blog/2011/12/restful-services-with-jquery-and-Java-using-jax-rs-and-jersey /
これは最新の回答です。Java EE 8(JSF 2.3)の場合、<h:commandScript>
を使用すると、JavaScript関数が作成されます。フードはjsfバッキングBeanメソッドを呼び出します。これはJavaScriptなので、jsコードから呼び出すことができます。
例jsf
<h:form>
<h:commandScript id="submit"
name="jsFunction"
action="#{bean.method}"/>
</h:form>
そしてjsコード
</script>
function invoke()
{
jsFunction();
}
</script>
さらなる訪問 Ajaxメソッドの呼び出し