2009-11-28 52 views
1

我有以下的JSF UI的一部分 - 它与输入字段简单的搜索表单并提交:无法在JAVA后台获得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一部分问题,但是从第一眼看上去确定...

回答

2

必须指向的<h:inputText>到托管bean属性:

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

,并在bean定义:

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

然后在您的getFound()方法中使用searchParam;

当然,你需要有定义为管理豆的豆,但我相信你已经做到了:

<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教程(如this,例如)

+0

见请全部搜索方法上。 配置好的托管bean。 我已经将searchParam属性添加到bean。 一种现在UI看起来像: \t \t \t \t \t的 \t \t \t的 \t \t 但是在后端仍然是空的。 – sergionni 2009-11-28 18:59:04

+0

action方法应该是void,你应该使用'operation.getFound'而不是operation.found。 – Bozho 2009-11-28 19:01:00

+0

也许我不需要searchParam for bean? 似乎我只需要从请求中获取输入值并将其传递给HQL查询。 从Portlet和JSP的角度来看,这是明确的操作,但对于JSF和受管Bean来说不是那么清楚。 – sergionni 2009-11-28 19:04:04