【问题标题】:primefaces autocomplete when cleared field giving previuos results of page on clicking submit button清除字段时primefaces自动完成,在单击提交按钮时给出页面的previuos结果
【发布时间】:2012-09-04 11:00:47
【问题描述】:

我正在使用从数据库中检索结果的主要面孔的自动完成标签。

问题是,当我提交表单时将自动完成字段留空,我在页面上得到的结果是上一个请求的结果(之前选择的自动完成值) - 只有在我刷新页面时它才会被清除。

我希望在每次提交时不刷新浏览器页面,如果我使用退格键清除字段中的值并提交表单,它应该为这个特定实例提供正确的结果,而不是前一个。

我还在 jsf 页面表单中使用了一些文本字段,但没有这个问题。 谁能提供有关如何纠正此问题的指导?

已编辑: 代码:

<h:form>
  <h:dataTable id="Ressult" value="#{input.searchResults}" var="r">
    <h:column>#{r.ID}</h:column>
    <h:column>#{r.Name}</h:column>
  </h:dataTable>
  <tr>
    <td>Current Education Level</td>
    <td>
      <h:panelGrid styleClass="text-box">
        <p:autoComplete id="education" value="#{input.education}"
        completeMethod="#{input.getautocomplete}" var="a"
        itemLabel="#{a.Name}" itemValue="#{a}"
        converter="edConverter" forceSelection="true" />
        <p:column>#{a.Name} - #{a.id}</p:column>
      </h:panelGrid>
    </td>
  </tr>
  <tr>
    <td>City</td>
    <td>
      <h:selectOneMenu id="txtCity" styleClass="select-field"
      value="#{input.cityId}">
        <f:selectItem itemLabel=" Please Select" itemValue="0">
        </f:selectItem>
        <f:selectItems value="#{input.cities}"></f:selectItems>
      </h:selectOneMenu>
    </td>
  </tr>
  <tr>
    <td>Name of Person</td>
    <td>
      <h:inputText id="txtName" value="#{input.nameOfPerson}"
      styleClass="text-box"></h:inputText>
    </td>
  </tr>
  <h:commandButton id="btnSearch" value="Search"
  action="#{input.searching}">
    <f:ajax execute="@form" render="Ressult"></f:ajax>
  </h:commandButton>
</h:form>  

这是 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
    }
}

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

【问题讨论】:

  • 你在更新表格吗??请发布代码以获得更多帮助..
  • 请检查编辑的问题

标签: jsf-2 primefaces


【解决方案1】:

我的自动完成小部件遇到了同样的问题。 当我删除它的 id 属性时,它起作用了。可能是 Primefaces 中的一个错误。

【讨论】:

    【解决方案2】:

    你可能有两件事要做:

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

      <h:form onkeypress="return event.keyCode != 13;">
      
    2. 使用提供的 itemSelect/itemUnselect 功能清空 Bean 中的字段:

      <p:ajax event="itemSelect"
          listener="#{autoCompleteBean.handleSelect}" global="false"
          update=":some:where" />
      
      <p:ajax event="itemUnselect"
          listener="#{autoCompleteBean.handleUnselect}" global="false"
          update=":some:where" />
      
      <!-- rest of your facelet stuff -->
      

    在 Bean 中:

    public void handleSelect(final SelectEvent event) {
        final Search search = (Search) event.getObject();
        // do your addition here
    }
    
    public void handleUnselect(final UnselectEvent event) {
        final Search search = (Search) event.getObject();
        // do your substraction here
    }
    

    【讨论】:

    • 谢谢,onkeypress 提示解决了我遇到的一个难题。
    【解决方案3】:

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

    你的 bean 看起来有点奇怪。因为您在页面中调用了自动完成方法:getautocomplete,但该方法在您的 bean 中不存在。

    以这种方式使用自动完成功能:

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

    在你的 bean 中:

    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;
    }
    

    【讨论】:

    • 是的,这就是我的自动完成方法中发生的类似情况,我之前没有添加,因为我认为这是可以理解的。自动完成工作正常,它确实从数据库中检索值。问题是当我在同一页面上使用新值重新提交表单时,它会在列表中显示以前的结果。可以从重新提交时保存的先前状态中删除此行为吗??
    • 发布你的完整 bean 的代码。它现在正在猜测问题所在。
    【解决方案4】:

    已修复 5.2,升级您的 primefaces jar

    这里是日志问题

    https://code.google.com/p/primefaces/issues/detail?id=7592

    【讨论】:

    • 5.2也有同样的问题
    【解决方案5】:

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

    或将其设为假。

    【讨论】:

      【解决方案6】:

      只需将事件处理到服务器。适用于forceselection="true"

      <p:ajax event="itemUnselect" global="false" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        相关资源
        最近更新 更多