输入文本返回null值

时间:2015-02-17 23:51:52

标签: jsf-2 primefaces

这可能是一个简单的问题,但我无法弄明白。

这是我的xhtml页面:

*update p tag here, I am using primefaces*
<h:outputLabel for="Number" value="Number(100-800):" />
    <h:inputText id="number" name="number_Name" value="#{validationView.number}" label="Number">
        <f:validateDoubleRange minimum="100" maximum="800" />
    </h:inputText>

<p:commandButton value="S-ubmit" name="submit" actionListener="#{userBean1.method1}" ajax="false" icon="ui-icon-check" validateClient="true"/>

这是我的托管bean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

@ManagedBean(name="userBean1")
@SessionScoped
public class UserBean1
{
    public void method(){
       String value = FacesContext.getCurrentInstance().
        getExternalContext().getRequestParameterMap().get("number_Name");          
       System.out.println("Value: "+value);
    }

    public void method1(ActionEvent event) {    
    String param =  (String) event.getComponent().getAttributes().get("number_Name");
           System.out.println("Param: "+param);
    }
}

我尝试了两种方法,在两种情况下都是打印null输出。我将el-impl-2,2.jar导入了我的构建路径。我正在使用primefaces 5.1和Tomcat7

1 个答案:

答案 0 :(得分:1)

首先name中没有名为h:inputText的属性,如果您确实需要使用该属性,请参阅该问题以获取更多详细信息:{{3 }}

所以我假设您的h:inputText看起来像这样:

<h:inputText id="number" value="#{validationView.number}" label="Number">
    <f:validateDoubleRange minimum="100" maximum="800" />
</h:inputText>

第二次,在externalContext().getRequestParameterMap().get(key) key中引用当前请求中包含的请求参数名称,这些名称对应于客户端ID(因为name由JSF根据客户端ID自动生成,因此,例如,如果您的h:inputText位于id= "form"的表单中,那么您的客户ID将为"form:number",有关How to specify name attribute in h:inputText?的更多内容

您可以使用第一种方法:

public void method(){

   String value = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("form:number");          
   System.out.println("Value: "+value);
}

如果您只知道id的组件h:inputText而不是客户ID,请参阅:When and how is clientID generated in JSF?

Finnaly ,我认为最好的方法是使用以下方法让您从ActionEvent中受益:

public void method(ActionEvent event) {        

     String param = (String) ((UIInput) event.getComponent().findComponent("form:number")).getValue();
     System.out.println("Param: "+param);

}

注意:请注意event.getComponent()获取触发事件的组件p:commandButton(在您的情况下),而不是h:inputText