Первый шаг, если вы используете контейнер, совместимый с Java EE 6 (например, GlassFish V3, Resin 4, JBoss AS 6 или 7 и т. Д.), И вы добавили что-то вроде commons-el.jar в свой WEB-INF, удалить .Это не нужно и только навредит.
Я хочу поле поиска без кнопки (просто введите и нажмите ввод и выдайте результат)
В этомна случай, если вам также не нужна командная кнопка, но вы можете использовать что-то вроде этого:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
>
<h:head/>
<h:body>
<h:form>
<h:inputText id="search" value="#{bookBean.searchString}"
onkeypress="if (event.keyCode == 13) {onchange(event); return false;}"
onchange="return event.keyCode !== undefined"
>
<f:ajax listener="#{bookBean.updateBook}" render="output" />
</h:inputText>
<h2>
<h:outputText id="output" value="#{bookBean.book}"/>
</h2>
</h:form>
</h:body>
</html>
с bookBean
, определенным как:
@ViewScoped
@ManagedBean
public class BookBean {
private Map<String, String> exampleData = new HashMap<String, String>() {{
put("dune", "The Dune Book");
put("lotr", "The Lord of the Rings Book");
}};
private String searchString;
private String book;
public void updateBook(AjaxBehaviorEvent event) {
book = exampleData.get(searchString);
}
public String getSearchString() {
return searchString;
}
public void setSearchString(String searchString) {
this.searchString = searchString;
}
public String getBook() {
return book;
}
}
В Facelet обратите вниманиеважность элемента h:head
.Без этого JSF не знает, куда вставить в ваш ответ необходимый сценарий для поддержки AJAX.
В этом примере метод onchange
по умолчанию, который генерирует JSF, когда к такому клиенту добавляется поведение клиента f:ajax
Позвонил EditableValueHolder
s вызывается всякий раз, когда пользователь нажимает ввод.Атрибут listener вызывает метод для вызова события AJAX.Поскольку searchString
уже связан со свойством компонента поддержки, вам не нужно предоставлять его в качестве аргумента метода слушателя.
Небольшой недостаток этого метода заключается в том, что вызов AJAXтакже будет вызываться, когда вы изменяете значение в поле поиска и просто щелкаете за его пределами.
Обновление
Добавление обработчика onchange
к h:inputText
исправлена вышеупомянутая проблема.JSF автоматически связывает этот код с AJAX-кодом из поведения клиента.Если он возвращает false, цепочка прерывается и, следовательно, вызов AJAX не выполняется.
Обработчик onchange="return event.keyCode !== undefined"
вернет false, если обработчик вызван событием реального изменения;тогда объект события не будет иметь свойства keyCode
.