为什么没有调用Validator?

时间:2011-10-17 18:57:27

标签: java validation jsf jsf-2

在我的申请表中,我有以下表格

<h:form id="addItemForm" enctype="multipart/form-data">                      
    <h:panelGrid columns="3" border="1">
        <h:outputText value="Name: " />
        <h:inputText label="name" 
                     id="name" value="#{addItem.name}" 
                     required="true" requiredMessage="Name is required." />
        <h:message styleClass="errorMsg" for="name" />

        <h:outputText value="Description: " />
        <h:inputText label="description" 
                     id="description" value="#{addItem.description}" 
                     required="true" requiredMessage="Description is required." />
        <h:message styleClass="errorMsg" for="description" />

        <h:outputText style="font-weight: bold" value="Picture : " />
        <t:inputFileUpload label="picture" 
                           id="picture" value="#{addItem.picture}" 
                           required="true" requiredMessage="Picture is required." />
        <h:message styleClass="errorMsg" for="picture" />

    </h:panelGrid>
    <h:commandButton value="Confirm" actionListener="#{addItem.addItem}"/>
    <h:outputText id="status" value="#{addItem.statusMsg}" />
</h:form>

如果我输入说明&amp;将名称保留为空白,然后单击“确认”按钮,我没有看到缺少名称的任何错误消息。一个奇怪的事情是我的页面似乎被刷新,因为我输入的任何描述都消失了。此外,即使我输入了名称和描述,也从未调用actionListener中的addItem函数。

昨天,一切正常。如果有人能告诉我这里可能做错了什么,我将非常感激。

1 个答案:

答案 0 :(得分:2)

删除enctype="multipart/form-data"。 JSF没有本机支持。 JSF依赖于提交的请求参数application/x-www-form-urlencoded,而这已经是默认的表单编码。您的表单中也没有任何<input type="file">字段(既不是普通字段,也不是第三方JSF组件所代表的字段),因此您根本不需要multipart/form-data编码。

也许之前有效,因为你有一个由第三方组件库提供的过滤器来解析和准备multipart/form-data对JSF的请求,但是你已经从web.xml中删除了它,或者你没有包含它它在你的新项目中。


更新:您修改了问题以包含<t:inputFileUpload>。好的,你应该保留enctype="multipart/form-data"。表单未提交的唯一原因可能是ExtensionsFilter已从web.xml中移除或未能初始化。添加和/或阅读webapp启动日志。它是负责将multipart/form-data请求解析为JSF的可用参数的人。另一个可能的原因是您将多个<h:form>组件嵌套到一起会生成无效的HTML。另请参阅commandButton/commandLink/ajax action/listener method not invoked or input value not updated