gpt4 book ai didi

jsf - 将参数传递给 p :autoComplete 的completeMethod

转载 作者:行者123 更新时间:2023-12-02 05:25:32 25 4
gpt4 key购买 nike

我在项目的搜索表单中使用 PrimeFaces p:autoComplete 小部件。用户可以选择他想要包含的表单元素(搜索参数)的数量和类型,因此我需要将每个元素的 ID 传递给 completeMethod。我尝试添加 onfocus=".." 将对象传递给 bean,但只有在首次加载元素时才会激活。

我的问题:如何将属性传递给 completeMethod

元素的 XHTML(简单):

<p:autoComplete value="#{filter.value}" label="dynamic search attribute"
completeMethod="#{myBean.complete}" />

bean(简单):

@Named("myBean")
public class MyController implements Serializable {

public List<String> complete(String query) {
List<String> results = new ArrayList<String>();
// ... code
return results;
}
}

理论上,这似乎是完美的解决方案:

<p:autoComplete value="#{filter.value}" label="dynamic search attribute"
completeMethod="#{myBean.complete(filter)}" />

再次是 bean :

@Named("myBean")
public class MyController implements Serializable {

public List<String> complete(String query, FilterObject o) {
List<String> results = new ArrayList<String>();
// ... database query based on FilterObject o
return results;
}
}

最佳答案

您可以将其设置为属性:

<p:autoComplete value="#{filter.value}" label="dynamic search attribute" completeMethod="#{myBean.complete}">
<f:attribute name="filter" value="#{filter}" />
</p:autoComplete>

通过 UIComponent#getCurrentComponent() 获取:

public List<String> complete(String query) {
FacesContext context = FacesContext.getCurrentInstance();
FilterObject o = (FilterObject) UIComponent.getCurrentComponent(context).getAttributes().get("filter");
// ...
}

或者,如 #{filter}在您的情况下似乎已经在 EL 范围内,您也可以保留 <f:attribute>离开并通过在 Application#evaluateExpressionGet() 的帮助下以编程方式评估 EL 表达式来获取它:

public List<String> complete(String query) {
FacesContext context = FacesContext.getCurrentInstance();
FilterObject o = context.getApplication().evaluateExpressionGet(context, "#{filter}", FilterObject.class);
// ...
}

或者,如果它也是 @Named bean,那么你就可以 @Inject 它在父 bean 中:

@Inject
private FilterObject o;

关于jsf - 将参数传递给 p :autoComplete 的completeMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com