具有Immediate =“true”的按钮清除当前显示的验证消息

时间:2013-02-06 12:29:12

标签: jsf-2

我有一个commandButton,它在一个字段的帮助下重新显示页面。 这需要在没有JavaScript的情况下工作。 我不想触发验证,所以我添加了immediate = true。 这很好,但是,页面上的任何验证消息都会消失,而我希望它们留在那里。

<h:commandButton rendered="#{cc.attrs.helpId!= null}" styleClass="helpButton" value="?" type="submit" action="#{visibleHelp.toggle(cc.clientId)}" immediate="true" />

...

<h:panelGroup rendered="#{visibleHelp[cc.clientId] != null}" id="#{cc.attrs.name}_helpText" styleClass="help-text">
    <h:outputText value="#{help[cc.attrs.helpId]}"/>
</h:panelGroup>

...

这是怎么回事,或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

这是预期的行为。 faces消息是请求范围的。提交表单会创建新请求。对于immediate="true",不具有该属性的输入组件将不会被验证,因此不会生成面部消息。在同步(非ajax)回发上,由于整页重新加载,初始消息“消失”。

只需通过ajax提交,以便不会完全重新加载页面。

<h:panelGroup id="helpButton">
    <h:commandButton rendered="#{cc.attrs.helpId!= null}" styleClass="helpButton" 
        value="?" action="#{visibleHelp.toggle(cc.clientId)}" immediate="true">
        <f:ajax render="helpButton helpSection" />
    </h:commandButton>
</h:panelGroup>

...

<h:panelGroup id="helpSection">
    <h:panelGroup rendered="#{visibleHelp[cc.clientId] != null}" 
        id="#{cc.attrs.name}_helpText" styleClass="help-text">
        <h:outputText value="#{help[cc.attrs.helpId]}"/>
   </h:panelGroup>
</h:panelGroup>

是的,这仍然涉及到JavaScript,但是没有其他可行的解决方案,或者您必须删除immediate="true",以便为这些输入组件重新执行验证。