输入文本返回空值
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
这可能是个简单的问题,但我无法弄明白。
这是我的 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