2011-10-17 63 views
1

在我的应用程序,我有以下形式为什么不调用Validator?

<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> 

如果我输入的描述&保留原来的名称空白,我点击确认按钮,我没有看到任何错误讯息失踪名。一个奇怪的是,我的网页似乎被刷新,因为我输入的任何描述都没有了。另外,即使我输入了名称和描述,actionListener中的addItem函数也不会被调用。

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

+0

您必须为命令按钮使用ajax('

+0

通过“刷新”我的意思是我点击确认按钮后,它似乎是一个全新的请求,根本不涉及到前一个请求。我的ManagedBean在ViewScope中,这意味着我输入的描述应该在这里,即使我没有输入名称。 –

+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

+0

其实,我确实有一个文件输入字段,我试图缩短我的代码,所以人们不必读太多。非常感谢你的帮助!你对JavaEE真的很有经验。当我将我的代码与存储库中的朋友代码合并时,我忘记更新web.xml。因此,我失去了我的过滤器和过滤器映射设置。 –

+0

不客气。 – BalusC

相关问题