0

我有一个带有下拉菜单和一个重置按钮的 primefaces 自动完成功能。

如果我按下重置按钮,从下拉列表中选择一个值后,自动完成下拉列表变为空白(即它正在重置)。但问题是重置自动完成后,我无法获取自动完成下拉列表中的值。

这是我的代码

索引.xhtml

<p:autocomplete id="name" binding="#{myBean.name}" value="#{myBean.personName}" completeMethod="#{myBean.retrieveNames}" dropdown="true"/>

<p:commandButton value="Reset" action="#{myBean.reset}"  immediate="true" update="@form">

MyBean.java

private String personName;
private UIInput name;


public void resetUIValue(UIInput uiObj) {  
    uiObj.setSubmittedValue(null);
    uiObj.setLocalValueSet(false);
    uiObj.setValid(true);
    uiObj.setValue("");
}
public void reset() {
        this.clearFormValues();
        this.resetUIValue(this.name);

}
public void clearFormValues()
{
   this.name="";
}
public List<String> retrieveNames(String query)
{
    List<String> result=new ArrayList<String>();
    for(int i=0;i<10;i++)
    {
        result.add(query+i);
    }
    return result;
}
4

1 回答 1

1

我粘贴了您的代码并收到 3 个错误:

1) 这个.name=""; 不是我更改为 personName 的字符串

2)p:commandButton 应该以 /> 结尾

3)至少,当我尝试访问页面时,我得到了错误,它找不到 p:autocomplete,所以我把它改成了 p:autocomplete p:autoComplete

之后,当我按下重置自动完成仍然有效。

这是完整的代码:

 <h:form id="test" prependId="false">

 <p:autoComplete id="name" binding="#{beanT.name}" value="#{beanT.personName}" completeMethod="#{beanT.retrieveNames}" dropdown="true"/>
 <p:commandButton value="Reset" action="#{beanT.reset}"  immediate="true" update="@form" />

 </h:form>


 @ManagedBean(name="beanT")
 @ViewScoped
 public class TestBean {
    private String personName;
    private UIInput name;


    public UIInput getName() {
        return name;
    }
    public void setName(UIInput name) {
        this.name = name;
    }
    public void resetUIValue(UIInput uiObj) {  
        uiObj.setSubmittedValue(null);
        uiObj.setLocalValueSet(false);
        uiObj.setValid(true);
        uiObj.setValue("");
    }
    public void reset() {
            this.clearFormValues();
            this.resetUIValue(this.name);

    }
    public void clearFormValues()
    {
       this.setPersonName("");
    }
    public List<String> retrieveNames(String query)
    {
        List<String> result=new ArrayList<String>();
        for(int i=0;i<10;i++)
        {
            result.add(query+i);
        }
        return result;
    }
    public String getPersonName() {
        return personName;
    }
    public void setPersonName(String personName) {
        this.personName = personName;
    } 
 }
于 2013-09-18T06:56:58.913 回答