Не удается получить значение поля ввода JSF на бэкэнде JAVA

StackOverflow https://stackoverflow.com/questions/1813280

Вопрос

У меня есть следующая часть пользовательского интерфейса на JSF - это простая форма поиска с полем ввода и отправки:

    <h:form>
        <h:commandButton action="#{operation.found}" value="#{msg.search}" />
        <h:inputText name="searchParam"/>
    </h:form>

И, соответственно, на бэкэнде я пытаюсь получить значение поля ввода следующим образом:

public List<Store> getFound() {

    String name = (String) FacesContext.getCurrentInstance()
            .getExternalContext().getRequestParameterMap().get(
                    "searchParam");

    SessionFactory sessionFactory = new Configuration().configure()
            .buildSessionFactory();

    HibernateTemplate hbt = new HibernateTemplate();

    hbt.setSessionFactory(sessionFactory);

    foundStores = hbt.find(BEAN_PATH + " WHERE name = ?",
            new Object[] { name });

    return foundStores;

}

И нулевое имя передается бэкэнду.

Кажется, что проблема в части .jsf, но с первого взгляда выглядит нормально ...

Это было полезно?

Решение

Вы должны указать <h:inputText> на свойство управляемого компонента:

<h:inputText name="searchParam" value="#{searchBean.searchParam}" />

и определите в своем бине:

private String searchParam;
public String getSearchParam() {..}
public void setSearchParam(String searchParam) {..}

, а затем используйте searchParam в своем методе getFound();

Конечно, вам нужно определить компонент как управляемый компонент, но я предполагаю, что вы это сделали:

<managed-bean>
    <managed-bean-name>searchBean</managed-bean-name>
    <managed-bean-class>mypackage.SearchBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Вы можете проверить учебник JSF (например, этот , для пример)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top