【问题标题】:p:autoComplete - Pass More parametersp:autoComplete - 传递更多参数
【发布时间】:2016-06-16 02:01:59
【问题描述】:

我将 JSF 2.2 与 PrimeFaces 5.3 一起使用,我正在尝试使用 p:autoComplete

我想我在做某种语法错误,但我找不到它

我有这个页面

<h:selectOneMenu id="countryDropdown" value="#{myController.selectedCountryId}">
   <f:selectItems value="#{myController.countries}" var="co" itemValue="#{co.id}" itemLabel="#{msg[co.name]}"/>
</h:selectOneMenu>

<p:autoComplete 
   dropdown="true" 
   value="#{myController.selectedAutocompleteId}" 
   completeMethod="#{myController.callMyAutocompleteMethod}">
      <f:attribute name="selectedCountryId"  value="#{carCountryDropdown}" />
</p:autoComplete>

为了执行自动完成任务,我还需要“countryDropdown”的值。 为了在自动完成方法中检索“countryDropdown”选择项的值,我需要使用哪种语法?

在自动完成方法中我可以使用下面的代码

UIComponent.getCurrentComponent(context).getAttributes().get("selectedCountryId");

但我总是为空。

你能帮帮我吗?

【问题讨论】:

  • 为什么不直接在'countryDropDown'中使用ajax来设置它的值时选择和使用自动补全方法中的bean值?
  • 因为我会执行太多无用的请求
  • 多少?一?二?好的……
  • 不知道有多少。而且我对知道应用程序将执行多少无用请求不感兴趣。最重要的是我们可以改进这种方法。而且我认为尝试(几乎尝试)尽可能使用最好的方法很重要
  • 这里是恶魔的拥护者(并且强烈反对过早优化)所以每次自动完成触发并处理它时发送它对您的服务器的压力会大大减少吗?

标签: jsf primefaces autocomplete


【解决方案1】:

可以使用ajax,支持change事件:

< p:selectOneMenu ..>
    < p:ajax event="change" listener="#{myController.subjectSelectionChanged}" />
    <!--...-->
< /p:selectOneMenu>

触发侦听器subjectSelectionChanged,您可以在其中返回carCountryDropdown中“countryDropdown”的值

【讨论】:

  • 是的,但如果您同意我的观点,这不是最好的解决方案,因为如果我们更改 5 次“countryDropdown”和 1 次自动完成小部件,我将创建 6 个不同的请求。仅当用户更改自动完成小部件时,我可以通过哪种方式尝试发出请求?
  • 反过来呢?如果用户执行 8 次自动完成和 1 次 selectOneMenu,则它经常被发送和处理……如上所述,过早优化
  • 如果用户自动完成 8 次,对于应用程序来说是无法理解哪些请求是无用的。我们可以设置某种“延迟”以避免请求距离太近以时间为例。我理解你,但不是过早的优化。但我只是想找到最好的解决方案。我感谢你所有的帮助。只是与您分享(或一起寻找)一些对所有社区都有用的合适解决方案
猜你喜欢
  • 2012-01-07
  • 2015-09-19
  • 2013-10-21
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 2018-12-27
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多