当前位置: 首页 > 面试题库 >

JSF 2.0 AJAX:使用jsf.ajax.request(或其他方式)从javascript调用bean方法

夹谷浩宕
2023-03-14
问题内容

一些背景:我正在构建一个自定义JSF组件。该组件基本上是一个文本编辑器,它应具有一个“保存”按钮,用于保存编辑器的内容字符串。当我使用CodeMirror库时,我需要使用javascript从编辑器中获取内容(字符串),并将其发送到服务器。因此,在这种情况下,我不能使用基于XML的JS调用,例如f:ajax

问题:我打算使用发送字符串jsf.ajax.request,但是它不直接支持在bean上的调用方法。如何以AJAX方式在具有JSF的bean中调用方法?

至少有两种方法可以解决此问题:

  • 在具有隐藏输入字段的页面中包含隐藏表单。从javascript更新该输入字段,然后调用jsf.ajax.request发布该表单。如果需要,可以在属性的getter或setter中调用自定义操作。
  • 用raw处理请求XMLHttpRequest(或在其他JS库的帮助下)。创建一个servlet并调用它。

两种方法都很笨拙,后者也超出了JSF的范围。

我想念什么吗?你如何做这些?


问题答案:

我找不到如何用javascript直接调用bean的方法,但是这里有一个关于从javascript调用f:ajax-declaration的技巧:

1)创建一个隐藏表单,其中包含要发送到服务器的所有数据的字段。也包括ah:commandButton:

<h:form id="hiddenForm" style="display: none;">
    <h:inputHidden id="someData" value="#{someBean.someData}" />
    <h:commandButton id="invisibleClickTarget">
        <f:ajax execute="@form" listener="#{someBean.myCoolActionOnServer()}" />
    </h:commandButton>
</h:form>

通常,在这种情况下,listener属性#{someBean.myCoolActionOnServer()}是指您要在服务器上执行的方法。

2)在其他按钮中,用于onclick调用您的特殊javascript,然后通过javascript单击触发按钮:

<h:commandButton value="Click me" onclick="populateTheForm('hiddenForm'); document.getElementById('hiddenForm:invisibleClickTarget').click(); return false;" />

populateTheForm() 应该实际上将数据填充到hiddenForm的字段中。

这是我的情况的简化,但应该可以。不过,仍在寻找更方便的方法。



 类似资料:
  • 问题内容: 我正在做作业,遇到了一些错误。在一个类中,我有此方法: 现在,我收到错误消息“无法从静态上下文中引用非静态方法…”,因此我将getPoints()设置为静态方法,并将变量也设置为静态,并且它可以正常工作。但是在另一种打印对象的方法中,它不起作用(我相信是由于static关键字)。 所以我的问题是,有没有一种方法可以在不创建第二个Class实例的情况下调用方法?这是我所拥有的一般构想代码

  • 假设我有两个html文件具有如下功能: 我想从a.html直接指向B.html,然后直接调用函数B。我怎样才能做到?。因为我想要将JSON字符串从函数A传递到函数B,而不是使用window.onload()或$(document).ready()。 我将我的JSON字符串存储到本地存储,并将用户引导到b.html。然后函数B将读取本地存储并直接处理数据。

  • 我仍然是Java的新手,我正在努力使这个程序适合我的任务。 问题是: 杰夫在你家附近经营着一家当地的零售店。他已与您签订合同,让您创建一个交互式应用程序,以帮助他增加员工工资。创建一个名为 Details 的类,该类将包含员工 ID 号、名字、姓氏和薪水的获取和设置方法。包括一个名为getUpdateSalary()的方法,该方法将使员工的薪水增加10%。在您的主类中,包括一个名为 () 的静态方

  • 现在我得到错误“non-static method conly be referenced from a static context...”,所以我将getPoints()设置为静态方法,同时将变量设置为静态,这样就可以工作了。但是在另一个打印对象的方法中,它就不起作用了(我相信这是因为static关键字的缘故)。 那么我的问题是,在所有这些之后,有没有一种方法可以调用一个方法,而不创建第二个类

  • 问题内容: 是否有一种方法可以使每次调用方法时都会被调用的“超级方法”,即使对于未定义的方法也是如此?有点像这样: 编辑- 细节:我有一个库,该库进行了很多更新,并且每次更新都变得晦涩难懂。为了简化我的工作流程,我正在使程序自动更新库(需要执行我想做的事情,我不会具体说明原因,但是我的程序可以与将来的更新一起使用)并且我有混淆映射与库一起下载时,我想制作一种例如称为的代理,然后在我调用它时,将获得

  • 问题内容: 我有一个applet,可以从特定的文件夹上载一些文件并删除它们,但是当我从javascript代码中调用applet函数时,出现了问题,当我从它调用该函数时,它工作正常。 我的小程序代码: 这是我的JavaScript代码: 当我从javascript调用时,仅打印日志: 请注意,当我从applet方法调用时,它可以正常工作。 我将代码包装到中,但仅前进了一步,然后继续 问题答案: J