Вызов управляемого 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);
}