这可能是一个简单的问题,但我无法弄明白。
这是我的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
答案 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