【发布时间】:2011-12-09 12:54:18
【问题描述】:
在我的申请中,我有以下表格
<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 函数。
昨天,一切正常。如果有人能告诉我我在这里可能做错了什么,我将不胜感激。
【问题讨论】:
-
您必须使用 ajax (
<f:ajax) 让您的命令按钮不刷新页面。并尝试将您的form更改为<h:form id="addItemForm" prependId="false"。 -
“刷新”是指在我点击确认按钮后,它看起来像是一个全新的请求,与之前的请求完全无关。我的 ManagedBean 在 ViewScope 中,这意味着即使我没有输入名称,我输入的描述也应该在这里。
-
但是如果验证失败,那么
Update Model Values阶段将被转义,对吧? -
其实不是,“应用请求值”阶段发生在“验证”阶段之前。因此,即使我没有通过验证阶段,我输入的任何内容都应该可用。
标签: java validation jsf jsf-2