输入文本返回空值

Input text returning null value

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

这是我的 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

首先h:inputText里面没有叫name的属性,如果真的需要用那个属性,请参考那个问题详情:How to specify name attribute in h:inputText?

所以我假设你的 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",更多关于

您可以像这样使用第一种方法:

public void method(){

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

如果您只知道 h:inputText 的组件 id 而不知道其客户端 ID,请参阅:Find component by ID 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