Не удается получить значение поля ввода JSF на бэкэнде JAVA
-
06-07-2019 - |
Вопрос
У меня есть следующая часть пользовательского интерфейса на 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 (например, этот , для пример) р>
Не связан с StackOverflow