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

如何在JSF中使用jsf.ajax.request手动发送ajax请求

牧璞
2023-03-14
问题内容

我有一张桌子,每一行都有配置为调用js函数的’onclick’-这部分工作。我希望函数向我可以某种方式定义的方法发出ajax请求。返回时,应在表格下方显示一个div。这可能吗?我用以下代码尝试了JS函数:

<h:outputScript library="javax.faces" name="jsf.js" />
...
function clickAndRender() {
  jsf.ajax.request(this, event, {render: 'div-to-render'})
}

但这当然行不通。我不知道“源”参数的值(上面的代码使用“此”)应该是什么,我也不知道最后一个参数中的执行值应该设置为什么。我也不知道如何定义要调用的url和“
action”方法。

该解决方案还可以在点击提交的页面其他位置使用一些不可见的形式。有人可以帮忙吗?


问题答案:

根据JSF
2.3,您可以使用<h:commandScript>它。另请参阅规格问题613。

<h:form>
    <h:commandScript name="foo" action="#{bean.action}" render="div-to-render" />
</h:form>



function clickAndRender() {
    foo();
}

自Mojarra
2.3.0-m06
起可用。

在问题发布后的三年以上,此答案已更新。以下是原始答案,该日期可以追溯到<h:commandScript>不存在时。

我不知道’source’参数的值(上面的代码使用’this’)应该是什么

它应该是UICommand您要调用的组件的客户端ID
,例如<h:commandLink><h:commandButton>标准JSF
API提供的,等。这样,JSF将在“应用请求值”阶段期间能够在组件树中定位所需的组件,然后将在其上注册的所有动作(侦听器)排队。

我也不知道应该将最后一个参数中的执行设置为什么。

它应该是您要在表单提交期间处理的组件的以空格分隔的客户端ID。与您通常在中使用的完全相同<f:ajax execute>

我也不知道如何定义要调用的网址

只是当前页面(从嵌套组件<form><h:form>位置所生成的页面)派生而来UICommand。但是您无需在中指定它jsf.ajax.request()。该jsf.js会已确定其基础上的客户端ID
UICommand组件。

以及“行动”方法。

只需以通常的方式指定目标组件的actionor actionListener属性即可UICommand

总而言之,您的具体问题很可能是UICommand视图中没有任何组件,因此您不能使用jsf.ajax.request()。一种方法是让表单包含一个被CSS隐藏的命令组件display:none

<h:form id="foo" style="display:none">
    <h:commandLink id="bar" action="#{bean.method}" />
</h:form>

然后,您可以将其foo:bar用作source参数。

jsf.ajax.request('foo:bar', null, {'javax.faces.behavior.event': 'action', 'execute': '@form', 'render': 'div-to-render'});

上面<f:ajax execute="@form" render="div-to- render">的命令实际上与命令组件中的命令相同。您也可以选择使用此路径,然后使用document.getElementById("foo:bar").click()代替jsf.ajax.request()

另外,您也可以创建一个自定义UICommand组件,这对于JavaScript用户而言将使其变得更加容易。JSF实用程序OmniFaces库具有这样的组件,即<o:commandScript>。另请参见其展示页面和源代码。JSF组件库PrimeFaces也具有类似的组件<p:remoteCommand>。另请参见其展示页面。RichFaces具有的<a4j:jsFunction>功能相同。另请参见其展示页面。



 类似资料:
  • 问题内容: 我正在使用似乎成功的jQuery 执行-request。但是如何在服务器端使用它并修改响应? 我是否需要另一个Servlet,因为Faces Servlet并非旨在解决这个问题? 它用于以下过程: 用户输入调用JS的地址和点击 JS使用Google地图检索地理数据并将其发送到服务器(我正在考虑将其用于上述代码) 服务器响应从数据库发送一些接近的位置 JS再次使用Google地图检索精确

  • 问题内容: 我想在我的JSF Web项目上实现Ajax。我搜索了一下,发现ICEFaces正在通过JSF支持Ajax。但是我不知道它的可用性。 任何人都有Ajax / JSF的经验,请指导我搬到哪里。 [编辑] 如果有人有类似经验,请也分享可用性。好与坏.. 问题答案: JSF 2.0使用f:ajax标记内置了对Ajax的支持。ICEFaces,OpenFaces和RichFaces的所有三个都还

  • 问题内容: 在JSF2中,是否可以使用Ajax请求动态更改ui:include的src值(例如PrimeFacesp:commandButton)?谢谢。 那就是我现在所拥有的。是否有可能使它成为Ajax(使用p:commandButton)? 问题答案: 另一个答案中提出的JSTL标签不是必需的,并且不能很好地重用。 这是一个使用纯JSF的基本示例(假设您运行Servlet 3.0 / EL 2

  • 我试图在ajax调用中发布json请求,但我没有收到来自请求的任何成功响应。 请找到我下面的代码:我在这里做错了什么: 它击中了网址,我得到200确定状态,但它总是出错条件... 有人能帮忙吗,我需要改变什么工作: 我尝试了data:JSON. stringify({key:"value", key1:"value e1"})-但这也没有帮助

  • 问题内容: 我正在使用的服务API具有给定的GET方法,该方法要求将数据发送到请求的正文中。 正文中所需的数据是用连字符分隔的ID列表,并且可能非常大,因此必须在正文中发送,否则可能会在浏览器/代理/网络服务器等链中的某处出现foobar。请注意,我无法控制服务或API,因此请不要提出更改建议。 我正在使用以下jQuery代码,但是在提琴手中观察请求/响应,尽管我将“ processData”选项

  • 问题内容: 我需要向运行守护程序的端口8080发送AJAX请求。 问题答案: 您不能跨域,子域或端口号信息。但是,如果您可以同时访问守护程序 和 请求站点,则可以使用JSONP 。如果需要返回数据,则需要支持查询参数并以正确的格式返回它。 将信息传递给守护程序: 现在,只需确保您的守护程序可以处理该参数。例如,如果守护程序的返回(唯一写入页面的内容)应如下所示: 对于键/值对: 对于数组: 如果没