【发布时间】:2013-03-08 10:16:35
【问题描述】:
我有 3 个 h:inputText :名称、起始编号和结束编号。
我有两个自定义验证函数 validateName 和 validateNumber,如 Bean 类所示。 函数调用如 show.xhtml 所示。
其中 validateName() 运行成功但在 validateNumber() 处生成错误如下:
show.xhtml @83,93 validator="#{myBean.validateNumber}": java.lang.NullPointerException
第 83 行是:
<h:inputText id="idstart" value="#{myBean.start}" validator="#{myBean.validateNumber}"/>
show.xhtml:
<h:inputText id="name" required="true" requiredMessage="Name cannot be empty!" value="#{myBean.name}" validator="#{myBean.validateName}">
<rich:message for="name"/>
<h:inputText id="idstart" value="#{myBean.start}" validator="#{myBean.validateNumber}"/>
<rich:message for="id1"/>
<h:inputText id="id2" value="#{myBean.end}" />
SessionScoped bean:
import javax.faces.application.Application;
import javax.faces.validator.ValidatorException;
public class MyBean
{
private Integer start;
private Integer end;
private String name;
public void validateName(FacesContext context,UIComponent component,Object value)throws ValidatorException
{
String name=value.toString();
/*Code for having Unique name */
FacesMessage msg = new FacesMessage("Unique Validation failed","Name used is already existing");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
public void validateNumber(FacesContext context,UIComponent component,Object value)throws ValidatorException
{
if(start > end)
{
FacesMessage msg = new FacesMessage("Number Validation failed","Start Number Should be less the End Number");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
【问题讨论】:
-
嗯,可能
start和/或end是null。调试这个。你在哪里初始化这两个我看不到的变量? -
你的 bean 中有 setStart 和 setEnd 方法吗?
-
像这样的非系统性 NPE 几乎肯定是由您忽略的某些事情引起的。你确定你的 bean 被声明为
@SessionScoped吗?value不为空?在此处发布完整的堆栈跟踪