在我的申请表中,我有以下表格
<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函数。
昨天,一切正常。如果有人能告诉我这里可能做错了什么,我将非常感激。
答案 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。