当前位置: 首页 > 知识库问答 >
问题:

Primeface自动补全组件的问题

狄玮
2023-03-14

我有一个使用JDK 8、JSF 2.2(JBoss提供的实现)、Spring 4.2和Primeface 6.2html" target="_blank">开发的本地Web应用程序

在应用程序中,我有一个XHTML页面,用于编辑对象的一些字段,该对象是名为SiepRoEncabezado的类的实例。其中一个字段是Sieprpapaescador的一个实例。

直到昨天,我还有一个

<p:autoComplete dropdown="true" 
                id="rpaAutoComplete"
                value="#{correccionROBean.tmpPescador}" 
                var="itemRpa"
                itemLabel="#{itemRpa.nmPescador.concat(' ').concat(itemRpa.nmPaterno).concat(' ').concat(itemRpa.nmMaterno)}"
                itemValue="#{itemRpa}"
                completeMethod="#{correccionROBean.filtrarRpa}"
                minQueryLength="4"
                maxResults="10"
                forceSelection="true" />

在这里,tmpPescador是托管bean correccionroban中的一个bean。那里的完整方法工作正常,选择项目按需要显示。但是,在我选择<代码>

<p:autoComplete dropdown="true" 
                id="rpaAutoComplete"
                value="#{correccionROBean.tmpPescador}" 
                var="itemRpa"
                itemLabel="#{itemRpa.nmPescador.concat(' ').concat(itemRpa.nmPaterno).concat(' ').concat(itemRpa.nmMaterno)}"
                itemValue="#{itemRpa}"
                completeMethod="#{correccionROBean.filtrarRpa}"
                minQueryLength="4"
                maxResults="10"
                forceSelection="true">
    <p:ajax event="itemSelect" listener="#{correccionROBean.onRpaSelect}" update="rpaAutoComplete"/>
</p:autoComplete>

在这里,当我选择一项时,侦听器方法没有被触发。当我尝试调试该方法时,就像根本没有调用该方法一样。

最后,当我按下保存按钮而没有选择中的项目时

什么可能导致这种行为?提前谢谢。

编辑

我在自动完成组件中添加了字段立即="true",这触发了ajax提交方法,但仍然无法执行保存按钮操作侦听器方法


共有1个答案

缪志新
2023-03-14
匿名用户

解决了。

有关更多详细信息,请参阅Melloware的答案和我对该答案的回复。

对于那些不熟悉转换器:

JSF API中定义的html" target="_blank">接口转换器允许将输入和输出的数据转换为自动完成的组件(以及其他一些JSF UI组件及其子类)。此接口有两种方法:

  • public Object getAsObject(FacesContext context,UIComponent component,String value):此方法必须返回一个与自动完成组件的value字段中定义的值属于同一类的对象(在我的情况下,它返回一个sieprapescador对象)。您必须在此方法中处理异常,因为它在两种情况下自动调用:

>

当您提交表单时。在这种情况下,value将是自动完成组件(在我的例子中,#{itemRpa.nrFolio})中的labelValue字段的值转换为String,使用在value为实例的类中定义的toString方法(#{itemRpa.nrFolio}是一个整数,因此该值将使用整数类自己的toString()实现转换)或在Object类中转换,如果没有定义toString()的实现。

  • 公共字符串getAsString(FacesContext上下文、UIComponent组件、对象值):此方法必须返回自动完成组件中要显示的每个项目的标签值的字符串表示形式。参数值与自动完成组件的标签值字段中定义的值属于同一类。显示项目时自动调用此方法(无论您是在自动完成的文本字段中输入字符还是按下下拉按钮(如果存在),都无所谓),并且它的调用次数与自动完成中的maxResults(在我的情况下为10)字段中定义的次数相同,使用从completeMethod的返回列表中获得的对象(在我的例子中,从从从AutoComplete的标签值字段中获得的列表中的每个对象),此方法获得它的nrFolio

我希望这对你们大家都有帮助

 类似资料:
  • 如果你仍旧希望节约一些打字时间,Atom自带简单的自动补全功能。 通过使用ctrl-space,自动补全工具可以让你看到并插入可选的完整单词。 通常,自动补全工具会浏览当前打开的整个文档,寻找匹配你开始打出来的单词。 如果你想要更多选项,在设置面板的Autocomplete包中,你可以设置为在所有你打开的缓冲区中寻找字符串,而不仅仅是当前文件。 自动补全功能在atom/autocomplete包中

  • 概述 自动补全在你输入时显示一个补全列表,因此你可以输入少量字符就可以完成一个很长的单词输入。对于源代码和 HTML(必须得输入<)这个功能是默认启用的。 禁用自动补全 可以通过auto_complete设置来禁用自动补全。把下面一行加入到Preferences 中Settings - User文件中即可: "auto_complete": false 如果自动补全被禁用了,你可以手动显示自动补

  • 本文向大家介绍Python 自动补全(vim),包括了Python 自动补全(vim)的使用技巧和注意事项,需要的朋友参考一下 一、vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.python 模块内函数,变量补全 5.from module impor

  • 智能自动补全会将不适用的条目过滤掉,只显示可用的类、变量、属性或者方法 操作步骤: 菜单栏:Code —> Completion —>SmartType 快捷键: Mac: control + Shift + 空格 Windows\/Linux: Ctrl + Shift + 空格

  • 本文向大家介绍idea输入sout无法自动补全System.out.println()的问题,包括了idea输入sout无法自动补全System.out.println()的问题的使用技巧和注意事项,需要的朋友参考一下 部分同学在使用 idea 时可能会遇到输入 sout 无法出现自动补全 System.out.println();的情况,其实 idea 默认补全的是 println(); 解决方

  • 问题内容: 我有一个测试用例,需要在基于ajax的文本字段中输入部分值,并验证列表是否具有预期的内容。如果是这样,请选择内容。任何想法如何使这项工作? 问题答案: 该 类型 命令可能不足以触发自动完成功能。否则,Dave Webb的建议就会出现。我唯一的补充是您可能需要 typeKeys 命令,这会导致触发略有不同的JavaScript事件,这更有可能触发自动完成小部件。