Sim*_*ger 16 autocomplete primefaces jsf-2
我在p:autoComplete
我的项目的搜索表单中使用PrimeFaces 小部件.用户可以选择他想要包含多少和哪些表单元素(搜索参数),因此我需要completeMethod
为每个元素传递一个ID .我已经尝试添加onfocus=".."
将对象传递给bean,但只有在首次加载元素时才会激活它.
我的问题:如何将属性传递给completeMethod
?
元素的XHTML(简单):
<p:autoComplete value="#{filter.value}" label="dynamic search attribute"
completeMethod="#{myBean.complete}" />
Run Code Online (Sandbox Code Playgroud)
豆(简单):
@Named("myBean")
public class MyController implements Serializable {
public List<String> complete(String query) {
List<String> results = new ArrayList<String>();
// ... code
return results;
}
}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,这似乎是完美的解决方案:
<p:autoComplete value="#{filter.value}" label="dynamic search attribute"
completeMethod="#{myBean.complete(filter)}" />
Run Code Online (Sandbox Code Playgroud)
又来了豆子:
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 33
您可以将其设置为属性:
<p:autoComplete value="#{filter.value}" label="dynamic search attribute" completeMethod="#{myBean.complete}">
<f:attribute name="filter" value="#{filter}" />
</p:autoComplete>
Run Code Online (Sandbox Code Playgroud)
得到它UIComponent#getCurrentComponent()
:
public List<String> complete(String query) {
FacesContext context = FacesContext.getCurrentInstance();
FilterObject o = (FilterObject) UIComponent.getCurrentComponent(context).getAttributes().get("filter");
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者,正如#{filter}
您的情况中出现的那样,您已经在EL范围中,您也可以<f:attribute>
通过以下方式以编程方式评估EL表达式来获取它Application#evaluateExpressionGet()
:
public List<String> complete(String query) {
FacesContext context = FacesContext.getCurrentInstance();
FilterObject o = context.getApplication().evaluateExpressionGet(context, "#{filter}", FilterObject.class);
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者,如果它也是一个@Named
bean,那么你可以@Inject
在父bean中使用它:
@Inject
private FilterObject o;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10747 次 |
最近记录: |