データベースから結果を取得する素顔のオートコンプリート タグを使用しています。
問題は、フォームを送信してオートコンプリート フィールドを空のままにすると、ページに表示される結果が以前のリクエスト (以前に選択したオートコンプリート値) のものになることです。ページを更新したときにのみクリアされます。
バックスペースを使用してフィールドの値をクリアし、フォームを送信すると、ブラウザページを更新せずに送信ごとに、前のものではなく、この特定のインスタンスに対して正しい結果が得られるはずです。
私は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>
そして、ここにビーンコードがあります:
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
}
}
更新によって、新しいアイテムが選択されたときに新しい結果が表示されることを意味する場合は、はい - フォームは更新される必要がありますが、オートコンプリートは何らかの方法で以前に選択された値を取得し、それに応じて結果を表示します。少なくともページを更新するまでは、オートコンプリートの以前のものが削除されます。