从JavaScript调用Managed Bean方法

Jas*_*son 14 jsf oracle-adf

我有一个应用程序与客户端图像映射定义了多个部分.我需要从<area>onclick属性调用Managed Bean中的方法.

这不起作用:

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

由于我的手被绑在图像映射上(不幸的是),如何在<area>标记内调用托管bean方法?

Mat*_*ley 21

如果使用primefaces,则不需要jquery.您将remoteCommand与name属性一起使用,并从javascript调用该名称,因此:

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

<p:remoteCommand name="myCommand" actionListener="#{personBean.method}" style="display: none;" />
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

function somejavascript(){
   myCommand();
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么我需要额外的somejavascript()方法?我们不能写`onclick ="myCommand();"`? (6认同)
  • @Falco onclick="myCommand()" 只会导致 personBean.method 执行。RemoteCommand 用于当我们需要先在 javascript 中执行某些操作,然后才调用 bean 方法时。 (2认同)

map*_*aft 20

你有几个选择.如果您使用的是JSF 2.0,则可以围绕这些区域标记构建复合组件.

然而,最简单的方法是调用隐藏的JSF输入按钮.

<h:commandButton id="hdnBtn" actionListener="#{personBean.method}" style="display: none;" />
Run Code Online (Sandbox Code Playgroud)

这将呈现为input页面上的HTML元素,您可以从Javascript访问并调用其click事件.

onclick="jQuery('#form:hdnBtn').click();"
Run Code Online (Sandbox Code Playgroud)