抱歉我的英文。按ID更新记录时,验证程序不起作用。如果我通过ajax制作验证器:
<h:inputText id="name" value="#{testMB.instance.name}" required="true">
<f:validator binding="#{nameValidator}" />
<f:ajax event="blur" render="nameMessage"/>
</h:inputText>
当我点击Save
按钮时:
<h:commandButton type="submit" action="#{testMB.save}" value="Save"/>
验证程序适用于blur
事件。如果我第二次点击“保存”按钮,则打印出错误:
Error Rendering View[/pages/test.xhtml]: java.lang.NullPointerException
并重定向到没有ID
的网址。如果我删除字段中的ajax blur
,那么当我点击按钮时会出现此错误。
如果验证者通过actionListener:
<p:commandButton update="@form" actionListener="#{testMB.save}" value="Save"/>
然后它正在运作。我通过ID更新记录时验证器不工作。我使用表单创建记录,然后这也有效。
我的testMB
:
public Entity getInstance() {
if (instance == null) {
if (id != null) {
instance = loadInstance();
} else {
instance = createInstance();
}
}
return instance;
}
public Entity loadInstance() {
return (Entity) getDao().findOne(getId());
}
public Entity createInstance() {
try {
return entityType.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
f:metadata
:
<f:metadata>
<f:viewParam name="testId" value="#{testMB.id}"/>
</f:metadata>
为什么不使用常规按钮和ID进行验证?