2011-03-07 26 views
1

我有一个表单,其中包含从数据库填充的值。该表单由若干个使用partialSubmit =“true”的ice:inputText组件组成,因此这些字段在失去焦点时将进行验证。该表格有一个保存和重置按钮。重置按钮具有immediate =“true”,并且只是一个常规的ice:commandButton,即不是type =“reset”。在ICEfaces中执行重置按钮时遇到麻烦1.8.2

典型inputText字段:

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

“重置”按钮:

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

问题是这样的:当用户改变所述值并且点击复位按钮,所述的ActionListener烧制哪些更新后台bean的值。验证错误将被删除,但是,页面呈现时,模型值不会更新。

阶段侦听指出,它是从Apply_Request_Values到Render_Response去。所以,我想我需要手动触发Update_model_values阶段。

想法?

回答

1

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

首先是将组件结合并直接在经由setSubmittedValue部件设置所希望的值。

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

所以尽量围绕ice:commandButton<ice:setEventPhase phase="INVOKE_APPLICATION">

PS:

阶段侦听指出,它是从Apply_Request_Values要 Render_Response 。所以,我想我需要 手动触发 Update_model_values阶段。

这来自immediate="true"。因此,ICEfaces在第二阶段(Apply_Request_Values)为组件执行所有阶段(在您的案例中为commandButton),然后直接进入最后阶段(Render_Response)。因此其他组件的验证器不会被调用。

我推荐阅读阶段(例如here在这里你还可以找到一节有关细节立即“立即事件处理”)