2012-03-08 35 views
12

Tôi có một ứng dụng có bản đồ hình ảnh phía máy khách với nhiều phần được xác định. Tôi cần gọi phương thức trong Bean được quản lý từ thuộc tính onclick <area>.Gọi Phương thức Quản lý Bean Từ JavaScript

này không hoạt động:

<area id="ReviewPerson" shape="rect" coords="3, 21, 164, 37" href="#" 
    onclick="#{personBean.method}" alt="Review Person" id="reviewPersonArea" 
    title="Review Person" /> 

Kể từ tay của tôi được gắn trên bản đồ hình ảnh (không may), làm thế nào tôi có thể gọi một phương thức bean được quản lý từ bên trong thẻ <area>?

Trả lời

16

Bạn có một vài tùy chọn. Nếu bạn đang sử dụng JSF 2.0, bạn có thể xây dựng một thành phần tổng hợp xung quanh các thẻ khu vực này.

Cách đơn giản nhất là gọi một nút nhập JSF ẩn.

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

Điều này sẽ làm cho như một yếu tố input HTML trên trang mà bạn có thể truy cập từ javascript và gọi sự kiện click của nó.

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

Yup, có vẻ là điều duy nhất cần làm. Cảm ơn đã giúp đỡ. – Jason

+0

Thay vì ** actionListener **, nếu chúng ta sử dụng thuộc tính ** action ** thì sẽ dễ dàng chuyển hướng trong các bean được quản lý. [Phương pháp chuyển hướng] (https://stackoverflow.com/a/6026401/4067157) không hoạt động với actionListener – snAtchnAren

3

Nếu bạn sử dụng Seam, Remoting có thể làm điều này cho bạn: http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/remoting.html

cách tiếp cận khác sẽ làm phơi bày các phương pháp như các dịch vụ REST, và gọi cho họ từ JavaScript sử dụng một cái gì đó giống như jQuery. Dưới đây là một bài viết hay về cách tiếp cận này: http://coenraets.org/blog/2011/12/restful-services-with-jquery-and-java-using-jax-rs-and-jersey/

+0

Không hẳn những gì tôi cần kể từ khi ứng dụng được thiết kế mà không cần một trong hai cách tiếp cận, nhưng bỏ phiếu tán kể từ khi họ là những ý tưởng tốt và tôi ước chúng ta có thể làm điều này như một dịch vụ REST. – Jason

3

Nếu bạn muốn hoàn thành ADF Faces giải pháp bạn có thể thử này:

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

Nếu bạn sử dụng primefaces, bạn không cần phải jquery. Bạn sử dụng remoteCommand với một thuộc tính tên, và gọi tên đó từ javascript, vì vậy:

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

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

Javascript:

function somejavascript(){ 
    myCommand(); 
} 
+6

Tại sao tôi cần phương thức somejavascript() bổ sung? Chúng ta không thể viết 'onclick =" myCommand(); "'? – Falco

+1

Bạn hoàn toàn đúng. –

+1

@Falco onclick = "myCommand()" sẽ chỉ đơn thuần là gây ra personBean.method để thực thi. remoteCommand là khi chúng ta cần thực hiện một cái gì đó trong javascript đầu tiên, và chỉ sau đó gọi phương thức bean. – dennisdeems

Các vấn đề liên quan