web-dev-qa-db-ja.com

JavaScriptからのマネージドBeanメソッドの呼び出し

複数のセクションが定義されたクライアント側のイメージマップを持つアプリケーションがあります。マネージド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メソッドを呼び出すにはどうすればよいですか?

14
Jason

いくつかのオプションがあります。 JSF 2.0を使用している場合は、これらのエリアタグの周囲に複合コンポーネントを構築できます。

ただし、最も簡単な方法は、非表示のJSF入力ボタンを呼び出すことです。

<h:commandButton id="hdnBtn" actionListener="#{personBean.method}" style="display: none;" />

これにより、JavaScriptからアクセスしてそのinputイベントを呼び出すことができるページ上のclick HTML要素としてレンダリングされます。

onclick="jQuery('#form:hdnBtn').click();"
19
maple_shaft

プライムフェイスを使用する場合、jqueryは必要ありません。 name属性を指定してremoteCommandを使用し、JavaScriptからその名前を呼び出すため、次のようになります。

<area... onclick="somejavascript();"... />

<p:remoteCommand name="myCommand" actionListener="#{personBean.method}" style="display: none;" />

JavaScript:

function somejavascript(){
   myCommand();
}
21
Matthew Oakley

完全なADF Facesソリューションが必要な場合は、これを試すことができます。

function doClick(){
   var button = AdfPage.PAGE.findComponentByAbsoluteId("aButton");
   ActionEvent.queue(button,true);
}
3
Tapas Bose

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 /

3
Jeremiah Orr

これは最新の回答です。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メソッドの呼び出し

0
Anas