【问题标题】:Sending AJAX request to submit the form in a commandButton that have an action发送 AJAX 请求以在具有操作的 commandButton 中提交表单
【发布时间】:2023-03-09 19:54:01
【问题描述】:

在我的页面中,我有一个表单,它的组件从 managedBean 中获取它的值。 然后,页面中有这个按钮:

<p:commandButton value="Search" action="#{mbProduct.selectBrand}" ajax="false" immediate="true" />

此按钮的作用是,当我单击时,它将用户重定向到品牌页面,因此他可以选择产品的品牌并返回产品页面(与用户单击按钮时完全相同)。 问题是,如果我更改表单中 inputTexts 的任何值,并立即单击“搜索”按钮,则 inputText 的值不会发送到 managedBean,因为在用户单击之前没有 ajax 请求来执行它搜索按钮。 我怎样才能避免这种行为并在按钮调用他的操作之前设置字段值?

---编辑--- 正如 Alexandre 所建议的,我从按钮中取出了 immediate="true",但现在我遇到了验证错误。 它在该字段中的具体验证:

<p:selectOneMenu value="#{myMb.selectedItem}">
<f:selectItems value="#{myMb.itemsList}" />
</p:selectOneMenu>

itemsList 在 myMb 构造函数中被延迟初始化,只有当用户不更改 selectedValue 时才会出现验证错误。如果他更改此值,则不会发生验证错误。

【问题讨论】:

  • 确切的验证错误是什么?日志是否提供更多信息?

标签: ajax jsf-2


【解决方案1】:

您应该删除您的immediate="true",以便在操作之前应用输入。

更多信息:http://balusc.blogspot.ca/2006/09/debug-jsf-lifecycle.html#WhenShouldIUseTheImmediateAttribute

【讨论】:

  • 它有效,但是这样做,组件正在被验证......有没有办法避免在组件中验证,但以同样的方式尝试应用具有值正确吗?
  • 您可以在所有不想验证的输入上尝试
  • 我想我开始明白这一点了……但是这段代码不起作用。它在此字段中的具体验证: itemsList 被延迟初始化在 myMb 构造函数中,只有当用户不更改 selectedValue 时才会发生验证错误。如果他更改此值,则不会发生验证错误。
  • 是的,我将代码放在问题中。顺便说一句,谢谢你帮助我。
  • 确切的验证错误是什么?日志是否提供更多信息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多