Jsf 执行ICEfaces 1.8.2中的重置按钮时出现故障

Jsf 执行ICEfaces 1.8.2中的重置按钮时出现故障,jsf,icefaces,Jsf,Icefaces,我有一个表单,其中包含从数据库填充的值。表单由许多带有partialSubmit=“true”的ice:inputText组件组成,因此当字段失去焦点时将对其进行验证。表单有一个保存和一个重置按钮。重置按钮具有immediate=“true”,只是一个常规的ice:commandButton,即不是type=“reset” 典型输入文本字段: <ice:inputText id="input1" maxlength="6" size="6" value="#{client.inboxThr

我有一个表单,其中包含从数据库填充的值。表单由许多带有partialSubmit=“true”的ice:inputText组件组成,因此当字段失去焦点时将对其进行验证。表单有一个保存和一个重置按钮。重置按钮具有immediate=“true”,只是一个常规的ice:commandButton,即不是type=“reset”

典型输入文本字段:

<ice:inputText id="input1" maxlength="6" size="6" value="#{client.inboxThreshold}" partialSubmit="true">
    <f:convertNumber integerOnly="true" />
    <f:validateLongRange minimum="0" />
</ice:inputText>

“重置”按钮:


问题在于:当用户更改值并单击reset按钮时,将触发actionListener,它将更新支持bean的值。验证错误将被删除,但是,在呈现页面时不会更新模型值

阶段侦听器指示从应用\u请求\u值到呈现\u响应。所以,我想我需要手动触发更新模型值阶段


想法?

这是因为组件将显示提交的值,而不是来自BER的数据,请参阅以获取解决方案。

这是因为组件将显示提交的值,而不是来自BER的数据,请参阅以获取解决方案。

我没有尝试过,但听起来像是一个典型的阶段问题。简而言之,这意味着在actionListener中,您在一个太早的阶段设置bean值。它们将被jsf组件的submitedValue覆盖。有两种可能的解决办法

首先是绑定组件,并通过setSubmittedValue直接在组件中设置所需的值

更好的解决方案是第二个。使用标签
ice:setEventPhase
(请参阅)。这样,您就可以强制在稍后的阶段调用actionListener,因此bean上的值不会被jsf组件上提交的值覆盖

所以试着用
包围
ice:commandButton

附言:

阶段侦听器指示它是 从应用\u请求\u值转到 作出回应。所以,我想我需要 手动触发 更新\u模型\u值阶段

这来自于
immediate=“true”
。这样,ICEfaces在第二个阶段(应用请求值)为组件执行所有阶段(在您的示例中为
命令按钮),然后直接为其他组件执行最后一个阶段(渲染响应)。因此,不会调用其他组件的验证器


我建议阅读有关阶段的内容(例如,您也可以在“即时事件处理”一节中找到有关即时事件的详细信息)

我没有尝试过,但这听起来像是一个典型的阶段问题。简而言之,这意味着在actionListener中,您在一个太早的阶段设置bean值。它们将被jsf组件的submitedValue覆盖。有两种可能的解决办法

首先是绑定组件,并通过setSubmittedValue直接在组件中设置所需的值

更好的解决方案是第二个。使用标签
ice:setEventPhase
(请参阅)。这样,您就可以强制在稍后的阶段调用actionListener,因此bean上的值不会被jsf组件上提交的值覆盖

所以试着用
包围
ice:commandButton

附言:

阶段侦听器指示它是 从应用\u请求\u值转到 作出回应。所以,我想我需要 手动触发 更新\u模型\u值阶段

这来自于
immediate=“true”
。这样,ICEfaces在第二个阶段(应用请求值)为组件执行所有阶段(在您的示例中为
命令按钮),然后直接为其他组件执行最后一个阶段(渲染响应)。因此,不会调用其他组件的验证器

我建议阅读有关这些阶段的内容(例如,您还可以在“即时事件处理”一节中找到有关即时事件的详细信息)

<ice:commandButton value="Reset" style="margin-left:5px;" actionListener="#{client.reset}" immediate="true"/>