Jsf 2 primefaces在清除字段时自动完成,在单击提交按钮时给出页面的上一个结果

Jsf 2 primefaces在清除字段时自动完成,在单击提交按钮时给出页面的上一个结果,jsf-2,primefaces,Jsf 2,Primefaces,我正在使用一个素数面的自动完成标记,它从数据库中检索结果 问题是,当我提交表单时,将“自动完成”字段留空,我在页面上得到的结果是以前请求的结果(以前选择的“自动完成”值)——它只在我刷新页面时被清除 我希望在每次提交时,在不刷新浏览器页面的情况下,如果我使用backspaces清除字段中的值并提交表单,那么它应该为这个特定实例给出正确的结果,而不是上一个实例 我还在jsf页面表单中使用一些文本字段,但这些字段没有这个问题。 有人能就如何纠正这个问题提供指导吗 编辑: 代码: #{r.ID} #

我正在使用一个素数面的自动完成标记,它从数据库中检索结果

问题是,当我提交表单时,将“自动完成”字段留空,我在页面上得到的结果是以前请求的结果(以前选择的“自动完成”值)——它只在我刷新页面时被清除

我希望在每次提交时,在不刷新浏览器页面的情况下,如果我使用backspaces清除字段中的值并提交表单,那么它应该为这个特定实例给出正确的结果,而不是上一个实例

我还在jsf页面表单中使用一些文本字段,但这些字段没有这个问题。 有人能就如何纠正这个问题提供指导吗

编辑: 代码:


#{r.ID}
#{r.Name}
当前教育水平
#{a.Name}-#{a.id}
城市
人名
下面是bean代码:

public class Input 
{
    private Education education;
    private List<SelectItem> cities;
    private Integer cityId;
    private String nameOfPerson;
    private List<Results> searchResults;
    //getters and setters

    public String searching()
    {
         searchResults=dao.getSearchResults(cityId,education,nameOfPerson);
         return "success";
    }

    public void autocomplete(String query)
    {
        //AUTOCOMPLTE lIST CODE HERE
    }
}
公共类输入
{
私立教育;
私人名单城市;
私有整数cityId;
个人的私有字符串名称;
私人列表搜索结果;
//接球手和接球手
公共字符串搜索()
{
searchResults=dao.getSearchResults(cityId、学历、人名);
返回“成功”;
}
公共void自动完成(字符串查询)
{
//自动完成列表代码在这里
}
}

通过更新,如果您的意思是在选择新项目时显示新结果,那么是-表单应该更新,但自动完成以某种方式接受以前选择的值并根据该值显示结果。至少在我刷新页面之前-只有这样,自动完成的上一个页面才会被删除。

如果我正确理解了您的问题,您的自动完成列表将显示在帖子之后。您可以使用您的表单一次又一次地提交到同一页面

你的豆子看起来有点怪。因为您正在页面中调用autocomplete方法:getautocomplete,但该方法在您的bean中不存在

以以下方式使用自动完成:

<p:autoComplete id="education" value="#{input.education}"  completeMethod="#{input.autocomplete}" var="a" itemLabel="#{a.Name}" itemValue="#{a}" converter="edConverter" forceSelection="true" />

在你的豆子里:

public List<Education> autocomplete(String query)
{
        List<Education> educations = new ArrayList<Education>();
        //search with query in your dao something like:
        educations = dao.searchEducation(query);

        return educations;
}
公共列表自动完成(字符串查询)
{
列表教育=新建ArrayList();
//在dao中使用查询进行搜索,如:
教育=dao.searchEducation(查询);
回归教育;
}

如果我正确理解了你的问题,你的自动完成列表将显示在帖子后面。您可以使用您的表单一次又一次地提交到同一页面

你的豆子看起来有点怪。因为您正在页面中调用autocomplete方法:getautocomplete,但该方法在您的bean中不存在

以以下方式使用自动完成:

<p:autoComplete id="education" value="#{input.education}"  completeMethod="#{input.autocomplete}" var="a" itemLabel="#{a.Name}" itemValue="#{a}" converter="edConverter" forceSelection="true" />

在你的豆子里:

public List<Education> autocomplete(String query)
{
        List<Education> educations = new ArrayList<Education>();
        //search with query in your dao something like:
        educations = dao.searchEducation(query);

        return educations;
}
公共列表自动完成(字符串查询)
{
列表教育=新建ArrayList();
//在dao中使用查询进行搜索,如:
教育=dao.searchEducation(查询);
回归教育;
}

我的自动完成小部件也有同样的问题。
当我删除它的id属性时,它工作了。可能是Primefaces中的错误。

我的自动完成小部件也有同样的问题。
当我删除它的id属性时,它工作了。可能是Primefaces中的错误。

您可能有两件事要做:

  • 通过在表单中执行以下操作,按Enter键阻止用户提交:

    <h:form onkeypress="return event.keyCode != 13;">
    

    您可能有两件事要做:

  • 通过在表单中执行以下操作,按Enter键阻止用户提交:

    <h:form onkeypress="return event.keyCode != 13;">
    

    修正了5.2,升级primefaces jar

    这里是日志问题


    修复了5.2版,升级primefaces jar

    这里是日志问题


    要解决主题问题,只需删除forceselection


    或者将其设为false。

    要解决主题问题,只需删除forceselection


    或者将其设为false。

    只需将事件处理到服务器即可。与forceselection=“true”一起使用


    只需将事件处理到服务器。与forceselection=“true”一起使用

    
    
    您是否正在更新表单??为了获得更多帮助,请发布代码。请检查编辑后的问题。您是否正在更新表格??为了获得更多帮助,请发布代码。请检查编辑后的问题是的,这就是我以前没有添加的自动完成方法中发生的情况,因为我认为这是可以理解的。autocomplete工作正常,它确实从db中检索值。问题是当我在同一页上使用新值重新提交表单时,它会在列表上显示以前的结果。这种行为可以从重新提交时保存的先前状态中删除吗?发布完整bean的代码。它现在正在猜测问题是什么。是的,这就是我以前没有添加的自动完成方法中发生的情况,因为我认为这是可以理解的。autocomplete工作正常,它确实从db中检索值。问题是当我在同一页上使用新值重新提交表单时,它会在列表上显示以前的结果。这种行为可以从重新提交时保存的先前状态中删除吗?发布完整bean的代码。现在它正在猜测问题是什么。谢谢,onkeypress提示解决了我遇到的一个难题。谢谢,onkeypress提示解决了我遇到的一个难题。5.2也有同样的问题,5.2也有同样的问题
    <p:ajax event="itemUnselect" global="false" />