天天看点

jsf 验证空值

com.sun.faces.renderkit.RenderKitUtils.getCommandLinkOnClickScript(RenderKitUtils.java:934)

最近刚接触JSF,遇到一个问题,折磨了一两天,终于解决了,但是不知道原因,先记下来,等项目不忙了,再研究,

JSP code:

<h:outputLabel for="name" value="Name: " styleClass="required"/>

    <a4j:region renderRegionOnly="true">

        <h:inputText id="name" value="#{agencyEditBean.agency.agencyName}"

             requiredMessage="Agency name is required."

             required="true" maxlength="50" size="30">

        <a4j:support event="onblur" action="null" ajaxSingle="true"/>

        </h:inputText>

        <rich:message for="name" errorClass="error"/>

    </a4j:region>

<a4j:commandButton id="save" action="#{agencyEditBean.doSaveAgency}"

                                         value="Save" style="margin:5px;" reRender="page:form" />

name不能为空,我在这里做了一个非空的判断,在create时,一切正常,不输入name,click save buttton, 返回当前画面,提示"Agency name is required."。但是在edit时,不输入name,click save buttton,出现异常信息:

java.lang.NullPointerException

    com.sun.faces.renderkit.RenderKitUtils.getCommandLinkOnClickScript(RenderKitUtils.java:934)

    com.sun.faces.renderkit.html_basic.CommandLinkRenderer.getOnClickScript(CommandLinkRenderer.java:295)

    com.sun.faces.renderkit.html_basic.CommandLinkRenderer.renderAsActive(CommandLinkRenderer.java:357)

    com.sun.faces.renderkit.html_basic.CommandLinkRenderer.encodeBegin(CommandLinkRenderer.java:165)

    javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)

    com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:269)

网上查了半天,发现JSF的文档真是太少了,找了半天源码,也没找到,郁闷了一天的时间,最后看着代码发呆,突然看到

<a4j:commandButton 的属性reRender="page:form"(注:我是改的别人的代码),不明白为什么要加上reRender,决定去掉试试,结果一切OK,从网上找了找相关说明,也不太明白,等以后有时间了再研究吧。郁闷啊。。。