Вызов управляемого Bean метода из JavaScript

У меня есть приложение с клиентской картинной картой с несколькими определенными разделами. Мне нужно вызвать метод в Managed 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" />

Так как мои руки привязаны к карте изображения (к сожалению), как я могу вызвать управляемый метод Bean из тега <area>?

Ответы

Ответ 1

У вас есть несколько вариантов. Если вы используете JSF 2.0, вы можете создать составной компонент вокруг этих тегов области.

Самый простой способ - вызвать скрытую кнопку ввода JSF.

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

Это будет отображаться как HTML-элемент input на странице, доступ к которой вы можете получить из Javascript, и вызвать его событие click.

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

Ответ 2

Если вы используете простые шрифты, вам не нужен jquery. Вы используете remoteCommand с атрибутом имени и вызываете это имя из javascript, поэтому:

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

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

Javascript:

function somejavascript(){
   myCommand();
}

Ответ 3

Если вы используете Seam, Remoting может сделать это для вас: http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/remoting.html

Другой подход заключается в том, чтобы разоблачить методы как службы REST и вызвать их из вашего JavaScript, используя что-то вроде jQuery. Вот хорошая статья об этом подходе: http://coenraets.org/blog/2011/12/restful-services-with-jquery-and-java-using-jax-rs-and-jersey/

Ответ 4

Если вы хотите закончить решение ADF Faces, вы можете попробовать следующее:

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