【问题标题】:Primefaces autocomplete completeMethod with extra parameter带有额外参数的 Primefaces 自动完成完成方法
【发布时间】:2022-07-07 07:03:42
【问题描述】:
我在使用 completeMethod 的 dataTable 内有 autoComplete。是否可以将行对象传递给 completeMethod bean 实现,或者以某种方式让 bean 知道我当前正在处理哪个行对象?谢谢。
伪代码:
<p:dataTable var="selection" value="#{bean.selections}">
<p:column headerText="Selection">
<p:autoComplete id="dd" dropdown="true" value="#{bean.country}"
completeMethod="#{bean.completeText(selection)}">
<p:ajax event="itemSelect"/>
</p:autoComplete>
</p:column>
</p:dataTable>
【问题讨论】:
标签:
jsf
primefaces
autocomplete
【解决方案1】:
橡皮鸭效应,抱歉这么快就回答了我自己的问题。我已将我的 completeMethod 移动到选择对象,在我的情况下,它包含我需要的所有附加参数。希望有人觉得它有用。
<p:dataTable var="selection" value="#{bean.selections}">
<p:column headerText="Selection">
<p:autoComplete id="dd" dropdown="true" value="#{bean.country}"
completeMethod="#{selection.completeText}">
<p:ajax event="itemSelect"/>
</p:autoComplete>
</p:column>
</p:dataTable>
【解决方案2】:
您可以将命令/ajax 组件中的属性传递给您的操作/侦听器方法,例如:
<p:autoComplete>
<f:attribute name="foo" value="#{bean.foo}"/>`
</p:autoComplete>
在您的 bean 方法中,您可以访问以下属性:
FacesContext = FacesContext.getCurrentInstance();
final UIComponent component = UIComponent.getCurrentComponent(context);
Object foo = component.getAttributes().get("foo");
根据您的要求,您可以直接传递行 var 实例,也可以只传递“id / rowkey”并手动查找。