1

我有一个命令按钮,可以在字段上重新显示页面并提供帮助。这需要在没有 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>

...

这就是它的样子,还是我错过了什么?

4

1 回答 1

0

这是预期的行为。面孔消息是请求范围的。提交表单会创建一个新请求。没有该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"以便为这些输入组件重新执行验证。

于 2013-02-06T13:57:39.470 回答